Datagridview multiselect不起作用

时间:2013-01-31 11:00:53

标签: c# .net winforms datagridview

我们有一个datagridview。其multiselect属性设置为true。 此datagridview将在特定的间隔时间内更新其行,例如一秒或两秒。

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

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

所以我不确定它为什么会发生,所以它就像我选择网格的第二行并且更新可能是这一行向下移动说第五行,之后我试图选择另一行保持移位键,然后发生此错误。

任何人请就此问题提出建议。

更新后的选择代码

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;
     }
  }
}

3 个答案:

答案 0 :(得分:1)

在这样的用户交互结束之前,你不能推迟更新吗?

答案 1 :(得分: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];
    }
}

让我知道它是否有效。

答案 2 :(得分:0)

为了解决实际问题(刷新后换档键不适用于多选) - 这可以通过设置来修复

dataGridView.CurrentCell = ...

(设置CurrentCell包含在已接受的答案中,但尚未提及此特定问题)