【问题标题】:Sync column names of DataGrid and DataTable in WPF在WPF中同步DataGrid和DataTable的列名
【发布时间】:2012-07-26 20:47:46
【问题描述】:

我有一个数据网格。当我更改 DataGrid 的列名之一时,我希望出现一个事件,以便 DataTable 的列名(DataGrid 的 ItemSource)也发生更改。

如何同步 DataGrid 和 DataTable 的列名?

编辑

我有这样的数据网格,有 6 列:

<wpfc4:RGrid x:Name="dgrid" Grid.Row="2" ItemsSource="{Binding Model.CurrentDataTable}" Style="{DynamicResource DataGridRStyle}" AutoGenerateColumns="True"></wpfc4:RGrid>

这个 RemoveSelectedColumn 函数:

 private void RemoveSelectedColumn()
    {
        DataGridColumn toRemove = this.Columns[_selectedColumnIndex];
        DataView view = this.ItemsSource as DataView;

        view.Table.Columns.Remove(toRemove.Header.ToString());  
        // deleting column from datatable.

        this.UpdateLayout();
        this.Items.Refresh();
    }

它正在从数据表中删除,但数据网格仍然有 6 列,但删除的列有空白值。我如何更新数据网格,以便当我从数据表中删除 2 列时它只显示 4 列。

【问题讨论】:

    标签: wpf datagrid columnheader


    【解决方案1】:

    如果可能,我会尝试扭转这种情况,以便在您更改 DataTable 中的一列的名称时,DataGrid 会得到更新。

    如果您在 DataGrid 上将 AutoGenerateColumns 设置为 true,这应该很简单:

    1. 将 DataGrid 绑定到 DataTable(使用 DataGrid 的 ItemsSource 属性)。
    2. 确保包含您的 DataGrid 属性的类实现 INotifyPropertyChanged,然后在 DataTable 上的列名称发生更改时引发 PropertyChanged 事件。

    【讨论】:

    • 如果你尝试this.ItemsSource = Model.CurrentDataTable,而不是this.Items.Refresh,会发生什么?基本上,我认为您需要完全重置您的ItemsSource,而不仅仅是刷新项目。而且我认为你根本不需要UpdateLayout
    【解决方案2】:

    我也有同样的问题,我首先在 itemsource table 中获取 temp 变量并使 itemsource 表对象为 null ,然后删除列并将值重新分配给 itemsource 表对象...这对我有用..

    DataTable tempTable = ItemsourceDataTable;
    ItemsourceDataTable= null;
    tempTable.Columns.Remove("ColumnHeaderName");
    ItemsourceDataTable= tempTable ;
    

    【讨论】:

      猜你喜欢
      • 2010-09-29
      • 2011-08-23
      • 2011-10-22
      • 2012-03-06
      • 2015-09-18
      • 1970-01-01
      • 2014-06-23
      • 2011-08-17
      • 1970-01-01
      相关资源
      最近更新 更多