2012-07-26 64 views
1

我有一個DataGrid。當我更改DataGrid的列名之一時,我想要出現一個事件,以便DataTable的列名(DataSource的DataSource)也會更改。在WPF中同步DataGrid和DataTable的列名稱

如何同步DataGrid和DataTable的列名稱?

編輯

我有這樣的DataGrid有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列,但刪除列有空白值。我如何更新datagrid,所以它只顯示4列,當我從數據表中刪除2列。

回答

0

如果可能的話,我會嘗試反轉此操作,以便每次更改DataTable中某一列的名稱時,DataGrid會被更新。

如果你有AutoGenerateColumns設置爲true你的DataGrid中,這應該是非常簡單:

  1. 綁定你的DataGrid到您的DataTable(使用DataGrid的ItemsSource屬性)。
  2. 確保包含DataGrid屬性的類實現INotifyPropertyChanged,然後在DataTable上的列名發生更改時引發PropertyChanged事件。
+0

請看到我的編輯區 – user1535848 2012-07-27 03:29:24

+0

而不是'this.Items.Refresh',會發生什麼,如果你嘗試'this.ItemsSource = Model.CurrentDataTable'?基本上,我認爲你需要完全重置你的'ItemsSource',而不是刷新項目。我認爲你根本不需要'UpdateLayout'。 – devuxer 2012-07-27 05:38:54

0

我也有同樣的問題,我做了itemsource表首先在temp變量中取出並使itemsource表對象爲null,然後刪除列並將值重新分配給項源表對象...這適用於我..

DataTable tempTable = ItemsourceDataTable; 
ItemsourceDataTable= null; 
tempTable.Columns.Remove("ColumnHeaderName"); 
ItemsourceDataTable= tempTable ; 
相關問題