2012-04-02 11 views
0

hinzugefügt werden Habe ich Datagrid wie folgt aus:Datagrid, die Datatable gebunden ist, zeigt keine Zeilen, die dynamisch an Datatable

public class 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); 

    } 

}

Nach AddRow wird aufgerufen, Tabelle hat eine Zeile, myGrid jedoch nicht. Was mache ich falsch?

Danke!

+0

Es wird nie automatisch geladen ..... Sie müssen die Sammlung benachrichtigen, die sich geändert hat .... Verwenden Sie ObservableCollection () für Änderungen bei Sammlungsänderungen .. – Ankesh

+0

Jedes Codebeispiel? nicht ganz wissen, was du meinst/wo ich anfangen soll. Danke! – Anya

Antwort

2

MVVM Verwendung wird eine bessere apporach sein .... Sie werden nicht einmal nedd das Raster für diesen Zweck zu erben ...

Ansicht Modell

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(); 
    } 
} 

Jetzt ne Sache zu MyColleciton hinzufügen und es wird automatisch in der Ansicht reflectied wird .....

einige Artikel fro mvvm Implemenation zum besseren Verständnis lesen ...

0

Tabelle erstellen ein öffentliches Eigentum:

private DataTable m_Table 

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

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

Sie müssen auch NotifyPropertyChanged ("Table") aufrufen; in Ihrer AddRow-Funktion.

Verwandte Themen