如何在WPF DataGrid中选择第一行/上一行/下一行/最后一行

4

我有一个包含标准DataGrid的WPF应用程序,用于显示大量数据。

现在我想添加按钮来选择下一行/第一行/上一行/最后一行。

有没有一种方法可以告诉DataGrid为我更改选择?

我尝试使用:

private void SelectNext_Click(object sender, RoutedEventArgs e)
{
  datagrid.MoveFocus(new TraversalRequest(FocusNavigationDirection.Next));
}

但是对于我来说它不起作用(无法更改所选项目,只是将单元格焦点设置为第一个项目)。
2个回答

10
private void SelectNext_Click(object sender, RoutedEventArgs e)
{
   if (dataGrid.Items.Count - 1 > datagrid.SelectedIndex)
   {
      datagrid.SelectedIndex++;
   }
}

private void SelectPrevious_Click(object sender, RoutedEventArgs e)
{
   if (dataGrid.SelectedIndex > 0)
   {
      datagrid.SelectedIndex--;
   }
}

private void SelectFirst_Click(object sender, RoutedEventArgs e)
{
   dataGrid.SelectedIndex = 0;
}

private void SelectLast_Click(object sender, RoutedEventArgs e)
{
   dataGrid.SelectedIndex = dataGrid.Items.Count - 1;
}

5
如果您通过数据绑定来填充数据网格,请按如下操作进行:
private void btnNext_Click(object sender, RoutedEventArgs e)
{
        ICollectionView view = CollectionViewSource.GetDefaultView(yourDataSource);
        view.MoveCurrentToNext();
}

接口ICollectionView拥有所有需要的方法,用于移动当前项。
在XAML中也要记得设置。
<DataGrid .....     IsSynchronizedWithCurrentItem="True" >

不错!有没有办法检查当前项目是否为最后一个,以便我可以禁用移动到下一个项目的按钮? - Sam
类似这样的内容在 http://msdn.microsoft.com/en-us/library/system.windows.data.collectionview.iscurrentafterlast.aspx 上。 - Klaus78
看起来没有办法禁用按钮。我只是想知道在事后是否到达了末尾(或开头),然后可以返回或换行。 - Sam
1
我在互联网上进行了一些搜索。如果以下内容返回true,则您不在最后一个项目上。希望这可以帮助到您。view.CurrentPosition < view.Cast<Object>().Count() - 1; - Klaus78

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接