【问题标题】:How to get correct index in datagrid after double clicking heading to sort?双击标题进行排序后如何在数据网格中获得正确的索引?
【发布时间】:2019-12-16 16:16:32
【问题描述】:

我目前的问题是:我首先得到一个数据网格,然后当我选择一行时,我会有一个索引,有了这个索引,我可以使用 convert datagrid to DataTable DataTable.rows[idx]["Column Name "] 来获取值。当我再次双击标题时,一切都被求助了,在后端,数据网格没有刷新,当我获取新索引时,它会去旧数据网格找到新的索引值。不想每次都刷新数据表,计算量太大。

比如第一行,resort之后,索引变成了4,系统会去使用DataTable.rows[4]["Column Name"]获取一个值,这不是我想要的值。

非常感谢!

【问题讨论】:

  • 排序时。一行很可能会失去焦点并改变颜色或消失,因为它现在不在屏幕上。选择不会改变。您选择行(或项目)而不是索引。为什么要使用 index 而不是 selecteditem?
  • 我没有那个数据网格的类。没有类,如何使用 selecteditems 获取详细信息?
  • 窗口是一个部分类,其中一个文件中的 xaml 和另一个文件中的代码。所以从技术上讲,我认为你确实有一堂课。您可以在后面的代码中引用数据网格的选定项。
  • 感谢您的回复,您是什么意思引用数据网格的选定项?我使用 SQLDataAdapter 填充数据集,然后获取数据网格,我应该使用哪个类来获取 IList?
  • 窗口后面的代码。使用数据网格的 selecteditems 属性。从文档中,请注意从 MultiSelector 的继承。 docs.microsoft.com/en-us/dotnet/api/… 其中有 SelectedItems docs.microsoft.com/en-us/dotnet/api/…

标签: c# .net wpf xaml datagrid


【解决方案1】:

SelectedIndex 属性仅在用户操作或代码选择行时才会更改。所以即使在排序之后,属性的值也不会改变。 您可以在 SortCommand 事件中将其显式重置为 -1(不选择任何内容)或 0(选择第一行)。

【讨论】:

  • 对不起,我没有表达清楚,我现在的问题是:我先得到一个datagrid,然后当我选择一行时,我会有一个索引,有了那个索引,我可以使用datagrid ->datatable.rows[idx]["Column Name"] 获取值。当我再次双击标题时,一切都被求助了,在后端,数据网格没有刷新,当我获取新索引时,它会去旧数据网格找到新的索引值。不想每次都刷新数据表,计算量太大,有办法解决吗?非常感谢!!
【解决方案2】:

目前,每次选择更改时,我都会将数据网格转换为数据表。

        private void DataGrid1_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        var idx = DataGrid1.SelectedIndex;


        _dtDataGrid = ((DataView)DataGrid1.ItemsSource).ToTable();



        if (idx < 0) idx = 0;
        BindAmDetail(_dtDataGrid, idx);
        if (DataGrid1.SelectedItem != null) DataGrid1.ScrollIntoView(DataGrid1.SelectedItem);


    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-16
    • 2016-10-12
    • 1970-01-01
    • 2014-04-04
    • 2018-12-08
    • 2020-06-22
    • 2011-03-11
    相关资源
    最近更新 更多