none
DataGridHeader行号,刷新时错乱 RRS feed

  • 问题

  • 如标题,DataGrid的行号在自动排序刷新时(数据源DataTable快速更新数据时),行号不正确。

    行号是加载LoadingRow事件。

    如图:

    2012年8月23日 6:34

答案

  • 如果不想重新绑定,同样,你可以在数据更新时重置所有DataGridRow的Header,具体参考:

                foreach (var item in grid.Items) {
                    DataGridRow row = (DataGridRow)grid.ItemContainerGenerator.ContainerFromItem(item);
                    if (row != null) {
                        row.Header = row.GetIndex() + 1;
                    }
                }


    Wanpeng wanpeng.ones@gmail.com

    • 已标记为答案 猪宝贝 2012年8月24日 7:10
    2012年8月23日 9:23

全部回复

  • LoadingRow事件在你的数据源发生改变时,仅触发实际更新的行,因此,没有改变的行是没有变化的,所以你的"行号"并不会全部发生变化。

    如果你依然希望使用LoadingRow事件处理你的行号,你可以在数据源变化时重新绑定你的数据:

                grid.ItemsSource = null;
                grid.ItemsSource = source.DefaultView;


    Wanpeng wanpeng.ones@gmail.com

    2012年8月23日 7:31
  • 这样处理的话,每加载一条数据,页面就会全部刷新一次,造成大量闪所,会大大降低用户体验。。。有更好的方法吗?
    2012年8月23日 8:32
  • 如果不想重新绑定,同样,你可以在数据更新时重置所有DataGridRow的Header,具体参考:

                foreach (var item in grid.Items) {
                    DataGridRow row = (DataGridRow)grid.ItemContainerGenerator.ContainerFromItem(item);
                    if (row != null) {
                        row.Header = row.GetIndex() + 1;
                    }
                }


    Wanpeng wanpeng.ones@gmail.com

    • 已标记为答案 猪宝贝 2012年8月24日 7:10
    2012年8月23日 9:23