2012-04-02 73 views
0

任何行,我有的數據網格這樣的:的Datagrid綁定到數據表不顯示動態添加到數據表

公共類myGrid:DataGrid中 {

DataTable Table = new DataTable(); 

    public myGrid() 
    { 
    } 

    protected override void OnInitialized(EventArgs e) 
    { 
     base.OnInitialized(e); 

     List<string> List = new List<string> { "Size1", "Size2", "Price", "Price2", "Note"} ; 
     foreach (string Name in List) 
     { 
      Table.Columns.Add(Name); 

      DataGridTextColumn c = new DataGridTextColumn(); 
      c.Header = Name; 
      c.Binding = new Binding(Table.Columns[Name].ColumnName); 
      this.Columns.Add(c); 
     } 

     DataColumn[] keys = new DataColumn[1]; 
     keys[0] = Table.Columns["PRICE"]; 
     Table.PrimaryKey = keys; 

     this.DataContext = Table; 
    } 



    public void AddRow(object[] Values) 
    { 
      Table.LoadDataRow(Values, true); 

    } 

}

後AddRow被調用,Table有一行,但myGrid沒有。 我在做什麼錯?

謝謝!

+0

它不會自動加載.....您需要通知已更改的集合....使用ObservableCollection ()用於修改集合更改.. – Ankesh 2012-04-02 08:26:31

+0

任何代碼示例?不太清楚你的意思/從哪裏開始。謝謝! – Anya 2012-04-02 08:36:20

回答

2

使用MVVM將是一個更好的apporach ....你甚至不會NEDD繼承電網爲了這個目的...

視圖模型

class MyViewModel:INotifyPropertyChanged 
{ 
    private ObservableColleciton<string> myCollection; 

    public MyViewModel() 
    { 
     //FunctiontoFillCollection() 
    } 

    public ObservableColleciton<string> MyCollection 
    { 
     get { return myCollection;} 
     set 
     { 
      mycolletion = value; 
      // i am leaving implemenation of INotifyPropertyChanged on you 
      // google it.. :) 
      OnpropertyChanged("MyCollection"); 
     } 
    } 
} 

View.Xaml

<DataGrid ItemsSource={Binding Path=MyCollection}> 
<!--Make Columns according to you--> 
</DataGrid> 

View.xaml.cs

/// <summary> 
/// Interaction logic for MainView.xaml 
/// </summary> 
public partial class MainView : Window 
{ 
    public MainView() 
    { 
     InitializeComponent(); 
     this.DataContext = new MyViewModel(); 
    } 
} 

現在添加NE的事情MyColleciton,它會自動在視圖中reflectied .....

讀了一些文章來回回MVVM實行更好地瞭解...

0

生成表的公共屬性:

private DataTable m_Table 

public DataTable Table 
{ 
    get { return this.m_Table; } 

    protected set { m_Table = value; NotifyPropertyChanged("Table"); } 
} 

您還需要調用NotifyPropertyChanged(「Table」);在你的AddRow函數中。