在WPF中设置选定的Datagrid行

时间:2013-12-09 19:22:50

标签: .net wpf vb.net datagrid .net-4.0

我已搜索过,似乎无法找到如何为多行执行此操作。

我有一个Datagrid,其items源是Datatable。用户可以选择多行,在数据网格外执行一些操作,然后单击按钮来更新数据。当发生这种情况时,我希望再次选择数据网格的选定行(在按钮单击之前)。这是我似乎无法弄清楚的部分。

我以为我可以通过存储当前选定的行索引来实现这一点。我发现可以通过选定的单元格访问它们,所以我尝试了这个:

Dim rows As List(Of Integer) = New List(Of Integer)
For Each cell As DataGridCellInfo In mydatagrid.SelectedCells
     rows.Add(mydatagrid.Items.IndexOf(cell.Item))
Next

 (...code to retrieve data...)

 For Each item As Integer In rows
      mydatagrid.SelectedIndex = item
 Next

但SelectedIndex只有一个值,并且只选择了之前选择的最后一行。

我搜索了一些,并尝试自己存储所选项目,但这不起作用,没有选择任何内容:

 Dim rows As List(Of Object) = New List(Of Object)
 rows.AddRange(mydatagrid.SelectedItems)

 (...code to retrieve data...)

 For Each item As Object In rows
        mydatagrid.SelectedItems.Add(item)
 Next

我想我错过了一些事情:(感谢您的帮助。

1 个答案:

答案 0 :(得分:3)

你几乎得到了它。您存储了选定的行索引,但DataGrid希望您自己选择项目:

mydatagrid.SelectedItems.Clear()
For Each item As Integer In rows
    If (item < mydatagrid.Items.Count) Then
        mydatagrid.SelectedItems.Add(mydatagrid.Items.GetItemAt(item))
    End If
Next

同样,如果要恢复单元格选择,则应存储DataGridCellInfos,然后使用SelectedCells集合。