在WPF中同步DataGrid和DataTable的列名

时间:2012-07-26 20:47:47

标签: wpf datagrid columnheader

我有一个DataGrid。当我更改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列。

2 个答案:

答案 0 :(得分:0)

如果可能,我会尝试撤消此操作,以便每次更改DataTable中其中一列的名称时,DataGrid都会更新。

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

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

答案 1 :(得分:0)

我也遇到了同样的问题,我将itemsource表首先放入temp变量并使itemsource表对象为null,然后删除列并将值重新分配给itemsource表对象...这对我有用.. < / p>

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