使用WPF DataGrid对DataTable进行排序?

3
好的,这真的让我疯了。我已经花了几个小时来尝试解决一个本应该简单的问题,但我没有成功。
我在XAML页面上有一个[WPF Toolkit] DataGrid,它具有DataTable作为其ItemsSource。我还在我的页面上放置了一个按钮,用于获取DataGrid的SelectedIndex(选定行),并将其用作函数中的变量,该函数读取绑定的DataTable的该索引处的行并返回值。一切正常,直到我点击列标题进行排序。它对DataGrid进行了排序,但没有对DataTable进行排序,因此我的SelectedIndex已更改,但DataTable的索引未更改,因此它返回错误的值。
我寻找了列标题单击事件 - 没有运气;我试图获取当前正在排序网格的列的标题 - 没有;我试图在DataGridTextColumn模板上使用“Click”EventSetter - 不支持。
我完全不知所措。如果WPF应该比Windows Forms更好,为什么有些简单的功能被删除了呢? (还有,您必须绑定数据才能添加行,只是说一下。)我可以使用Windows Forms DataGrid而不会有任何问题,但是我无法对其进行样式设置。
也许我没有正确执行检查或其他什么...?以下是我的检索/输出代码。有人有什么想法吗???您的帮助将不胜感激!
DataRow selectedRow = my_data.Tables[0].Rows[my_grid.SelectedIndex];
MessageBox.Show(selectedRow["ItemName"]);

请展示您正在使用的XAML代码片段。我是一个WPF新手,但这可能是因为您没有使用双向绑定。 - RedDeckWins
我相信双向绑定在使用ItemsSource属性时会自动处理。下面biju的回答提供了我所需要的,但是不管怎样感谢您的回复!谢谢。 - Randy Cleary
1个回答

9

排序应用于datatable的DefaultView。因此,它不会直接应用于Datatable。要访问已排序的表,请使用

DataTable.DefaultView.ToTable()

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