1

我们有一个数据网格视图。它的 multiselect 属性设置为 true。这个 datagridview 将在一个特定的时间间隔内更新它的行,比如一两秒。

因此,假设我将选择一行,然后按住 shift 键并选择另一行,然后选择这两行之间的整行,没有任何问题。

假设如果我选择一行,然后更新 gridview,然后如果我试图通过按住 shift 键来选择另一行,那么它不会选择整行,而是选择最后点击的行。

所以我不确定它为什么会发生,所以就像我选择网格的第二行并且更新可能是这一行被向下移动比如第五行,然后我试图选择另一行按住 shift 键,然后这个错误正在发生。

任何人请就这个问题提出您的建议。

更新后选择代码

for (int nRow = 0; nRow < Grid.Rows.Count; nRow++)
{
  foreach (string cookieIdval in SelectedCookies)
  {
     if (Grid.Rows[nRow].Cells[ColCookieID].Value.ToString() == cookieIdval.ToString())
     {
       Grid.Rows[nRow].Cells[ColCookieID].Selected = true;
       break;
     }
  }
}
4

3 回答 3

1

您不能将更新推迟到这样的用户交互结束吗?

于 2013-01-31T11:07:19.780 回答
0

修改您的更新方法,使其重新定位更新之前选择的内容。用途DataGridViewRow.SelectedDataGridView.CurrentRow性质。

执行此操作的方式取决于填充 DataGridView 的方式。

编辑:

似乎区分行的关键在ColCookieID列中。我们可以使用它来存储和恢复选定的行:

public void UpdateGridView()
{
    HashSet<string> selectedRows = new HashSet<string>();
    foreach (DataGridViewRow row in grid.Rows)
    {
        if (row.Selected)
            selectedRows.Add(row.Cells[ColCookieID].Value.ToString());
    }
    var currentRow = grid.CurrentRow.Cells[ColCookieID].Value.ToString()

    // ... update the grid

    foreach (DataGridViewRow row in grid.Rows)
    {
        var id = row.Cells[ColCookieID].Value.ToString();
        if (selectedRows.Contains(id))
            row.Selected = true;
        if (currentRow == id)
            grid.CurrentCell = row.Cells[0];
    }
}

让我知道它是否有效。

于 2013-01-31T11:15:34.737 回答
0

为了解决实际问题(刷新后shift键对多选不起作用)-通过设置修复

dataGridView.CurrentCell = ...

(设置 CurrentCell 包含在接受的答案中,但未提及此具体问题)

于 2015-10-13T04:31:42.540 回答