我在C#WPF中向Datagrid添加行时遇到问题。
我为数据做了一个Struct:
public struct MyData
{
public int id { set; get; }
public string title { set; get; }
public int jobint { set; get; }
public DateTime lastrun { set; get; }
public DateTime nextrun { set; get; }
}
以及添加数据的方法:
private void Add_Data_Grid_Row(object sender, RoutedEventArgs e)
{
Button button = sender as Button;
DockPanel panel = button.Parent as DockPanel;
DataGrid usedDataGrid = panel.Children.OfType<DataGrid>().FirstOrDefault();
usedDataGrid.Items.Add(new MyData { id = 11123, title = "King", jobint = 1993123, lastrun = DateTime.Today, nextrun = DateTime.Today });
}
你能以某种方式帮助我吗?
答案 0 :(得分:1)
//Use ObservableCollection
public ObservableCollection<MyData> MySource {get;set;}
//initialize once, eg. ctor
this.MySource = new ObservableCollection<MyData>();
//add items
this.MySource.Add(new MyData { id = 11123, title = "King", jobint = 1993123, lastrun = DateTime.Today, nextrun = DateTime.Today});
//set the itemssource
usedDataGrid.ItemsSource = this.MySource;
或者以MVVM的方式使用Binding而不是代码隐藏并设置itemssource 如果你没有将AutogenerateColumns设置为true,则必须使用绑定
来定义列 <DataGrid ItemsSource="{Binding MySource}" AutogenerateColumns="true"/>
答案 1 :(得分:1)
DataTable dt = new DataTable();
DataColumn column;
DataRow row;
DataView view;
row = new DataRow();
dt.Rows.Add(row);
column = new DataColumn();
column.DataType = System.Type.GetType("System.Int32");
column.ColumnName = "id";
dt.Columns.Add(column);
column = new DataColumn();
column.DataType = Type.GetType("System.String");
column.ColumnName = "item";
dt.Columns.Add(column);
for (int i = 0; i < 10; i++)
{
row = dt.NewRow();
row["id"] = i;
row["item"] = "item " + i.ToString();
dt.Rows.Add(row);
}
view = new DataView(dt);
dataView1.ItemsSource = view;
dataView1 = Datagrid的名称。
答案 2 :(得分:0)
如果DataGrid
绑定到数据源,则在控件中添加/操作行的常用方法不是作用于控件本身(仅显示绑定数据源的内容),而是相反,尝试简单地添加/操作数据源本身的内容,例如,向struct集合添加一个新的struct条目,DataGrid
将立即反映这样的新条目。
答案 3 :(得分:0)
您必须将DataGrid绑定到ObservableCollection。现在每当你向ObservableCollection添加一个新项时,DataGrid都会刷新最新的更新。
请看一下这个例子:http://www.codeproject.com/Articles/42536/List-vs-ObservableCollection-vs-INotifyPropertyCha
答案 4 :(得分:0)
您的数据结构必须实现一个枚举接口。对于这个feture,您可以将它添加到ObservableCollection或任何实现IEnumerable的类(如列表,但这不提供observablity但将数据添加到列表),这样就可以为您提供基本的WPF元素实现 此外,如果有必要,您必须实现INotifyPropertyChange接口以关注模型绑定事件操作。