2017-06-12 60 views
-1

我在後面的代碼中向數據表添加/刪除列和行。在我的xaml代碼中,我有一個DataGrid,其中的ItemsSource綁定到DataTable,但DataGrid不顯示新的或刪除的列。行正常工作。爲什麼DataGrid在添加代碼後不顯示DataTable中的新列?

這背後是我的代碼:

public MainWindow() 
{ 
    InitializeComponent(); 

    this.DataContext = this; 
    this.Table = new DataTable(); 
} 

private DataTable _Table; 
public DataTable Table 
{ 
    get { return this._Table; } 
    set { this._Table = value; } 
} 

public void AddColumn() 
{ 
    this.Table.Columns.Add("ColumnTest"); 
} 

public void AddRow() 
{ 
    this.Table.Rows.Add(); 
} 

的XAML:

<DataGrid Name="dgdMain" 
      Grid.Column="1" 
      AutoGenerateColumns="True" 
      ItemsSource="{Binding Path=Table.DefaultView}"> 
</DataGrid> 

的方法來添加一列或行通過一個按鈕單擊事件被調用。如果我在綁定之前添加了一些列,則列顯示正確。

+0

嘗試'ItemsSource =「{綁定表}」'。這假定你已經正確設置了視圖'DataContext'。 – MoonKnight

+0

謝謝,但它仍然是同樣的問題。 – stoermi

回答

0

它沒有默認。你將不得不自己添加任何新的列:

public void AddColumn() 
{ 
    this.Table.Columns.Add("ColumnTest"); 
    dgdMain.Columns.Add(new DataGridTextColumn() { Binding = new Binding("ColumnTest"), Header = "ColumnTest" }); 
} 

的列只能自動生成的,當你設置DataGrid的ItemsSource。在此之後動態添加到DataTable的任何新列都不會自動添加到DataGrid

0

DataGrids不監視基礎數據表數據源上的模式更改。如果你想更新數據網格,改變你的AddColumn方法並在代碼隱藏方面實現INotifyPropertyChanged。如果您將此代碼從代碼隱藏移到ViewModel(強烈推薦),那麼您還需要在那裏實現INotifyPropertyChanged。

public void AddColumn() 
{ 
    this.Table.Columns.Add("ColumnTest"); 
    OnPropertyChanged(nameof(Table)); 
} 

public event PropertyChangedEventHandler PropertyChanged; 
protected void OnPropertyChanged([CallerMemberName] string propertyName) => 
    PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); 
+1

在調用'OnPropertyChanged();'時,'CallerMemberNameAttribute'做了什麼?爲「AddColumn」提高PropertyChanged似乎毫無幫助。提高它「表」將無濟於事(我剛剛測試過)。 –

+0

忘記添加正確的屬性。編輯。謝謝 –

相關問題