使用 WPF DataGrid 对 DataTable 进行排序?

发布于 2024-11-03 01:25:23 字数 770 浏览 0 评论 0原文

好吧,这让我发疯。我花了几个小时试图找出一个简单的解决方案,但我没有运气。

我在 XAML 页面上有一个 [WPF Toolkit] DataGrid,该页面有一个 DataTable 作为其 ItemsSource。我的页面上还有一个按钮,用于获取 DataGrid 的 SelectedIndex(选定行)并将其用作函数中的变量,该函数读取该索引处绑定的 DataTable 行并返回一个值。一切正常,直到我单击列标题对其进行排序。它对 DataGrid 进行排序,但不对 DataTable 进行排序,因此我的 SelectedIndex 已更改,但 DataTable 的索引未更改,因此它返回错误的值。

我寻找了列标题点击事件 - 没有运气;我试图获取网格当前排序所依据的列的标题 - nada;我尝试在 DataGridTextColumn 模板上使用“Click”EventSetter - 不受支持。

我完全不知所措。如果 WPF 应该是对 Windows 窗体的改进,那么为什么删除了一些简单的功能呢? (只是说,您必须绑定数据才能添加行,这也很愚蠢。)我可以使用 Windows 窗体 DataGrid 并且不会遇到任何问题,但我无法设置它的样式。

也许我没有正确执行检查或其他什么......?下面是我的检索/输出代码。有人有什么想法吗???我们将非常感谢您的帮助!

DataRow selectedRow = my_data.Tables[0].Rows[my_grid.SelectedIndex];
MessageBox.Show(selectedRow["ItemName"]);

Okay, this is driving me nuts. I've spent hours trying to figure out what should be a simple solution, but I'm having no luck.

I have a [WPF Toolkit] DataGrid on an XAML page that has a DataTable as its ItemsSource. I also have a button on my page that gets the DataGrid's SelectedIndex (selected row) and uses it as a variable in a function that reads the bound DataTable's row at that index and returns a value. Everything works fine until I click a column header to sort it. It sorts the DataGrid but does not sort the DataTable with it, so my SelectedIndex has changed but the index of the DataTable has not, thus it returns the wrong value.

I've looked for Column Header click events - no luck; I tried to get the header of the column by which the grid is currently sorted - nada; I tried to use a "Click" EventSetter on the DataGridTextColumn template - not supported.

I'm completely at a loss. If WPF is supposed to be an improvement over Windows Forms, why has some of the simple functionality been removed? (It's also dumb that you have to bind data just to add rows, just saying.) I can use a Windows Forms DataGrid and won't have any trouble, but then I can't style it.

Maybe I'm not performing the check properly or something...? Below is my retrieval/output code. Anyone have any ideas??? Your help will be greatly appreciated!

DataRow selectedRow = my_data.Tables[0].Rows[my_grid.SelectedIndex];
MessageBox.Show(selectedRow["ItemName"]);

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

温馨耳语 2024-11-10 01:25:23

排序应用于数据表的 DefaultView。因此它不会直接应用于数据表。要访问排序后的表,请使用

DataTable.DefaultView.ToTable()

The sorting is applied to the DefaultView of the datatable.So it will not be applied to the Datatable directly.To access the sorted table use

DataTable.DefaultView.ToTable()
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文