绑定到DataTable的Datagrid不显示任何动态添加到DataTable中的行

本文关键字:DataTable 添加 动态 Datagrid 绑定 显示 任何 | 更新日期: 2023-09-27 18:29:46

我有这样的数据网格:

公共类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没有。我做错了什么?

谢谢!

绑定到DataTable的Datagrid不显示任何动态添加到DataTable中的行

使用MVVM将是更好的选择。。。。你甚至不会为了这个目的而继承网格。。。

查看模型

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

查看.Xaml

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

查看.xaml.cs

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

现在向MyColleciton添加一个内容,它将自动在视图中反射。。。。。

阅读一些关于MVVm实现的文章以更好地理解。。。

使表成为公共属性:

private DataTable m_Table
public DataTable Table
{
    get { return this.m_Table; }
    protected set { m_Table = value; NotifyPropertyChanged("Table"); }
}

您还需要调用NotifyPropertyChanged("表");在AddRow函数中。