我有一个DataGrid
绑定到一个数据库,有一个表和一个列(FooTable和FooName)。
使用以下代码,我可以将DataGrid
绑定到DataTable
并显示数据库数据。但是,每次我按DataSet_Add_Click()
添加新行时,都不会向DataGrid
添加任何内容。我虽然通过DataTable
将DataGrid
绑定到ItemsSource
,但是向DataTable添加新行不会向DataGrid添加行。为什么呢?
public partial class MainWindow : Window
{
SqlCeConnection conn = new SqlCeConnection();
/* Define the Connection String */
string connString;
DataGrid dg1 = new DataGrid();
DataTable dt = new DataTable();
public MainWindow()
{
InitializeComponent();
connString = @"...";
SqlCeConnection conn = new SqlCeConnection(connString);
conn.Open();
SqlCeDataAdapter da = new SqlCeDataAdapter();
string sqlStr = @"SELECT * FROM FooTable";
da.SelectCommand = new SqlCeCommand(sqlStr, conn);
DataSet ds = new DataSet();
da.Fill(ds, "FooTable");
dt = ds.Tables["FooTable"];
dg1.ItemsSource = ds.Tables;
DataRow newRow = dt.NewRow();
newRow["FooName"] = "Mary";
dt.Rows.Add(newRow);
CreateDataGrid();
}
public struct DataItem1
{
public string FooName { get; set; }
}
private void CreateDataGrid()
{
DataGridTextColumn col = new DataGridTextColumn();
col = new DataGridTextColumn();
col.Binding = new Binding("FooName");
col.Header = "FooName";
dg1.Columns.Add(col);
/* dataGrid1 exist in XAML and is a parent of the DataGrid */
dataGrid1.Children.Add(dg1);
}
private void DataSet_Add_Click(object sender, RoutedEventArgs e)
{
DataRow newRow2 = dt.NewRow();
newRow2["FooName"] = "Mary";
dt.Rows.Add(newRow2);
}
}
答案 0 :(得分:2)
请发布绑定Itemssource的xaml或cs代码。
您的DataSet_Add_Click是否将行添加到数据表中?如果是,那么它似乎只是数据网格的刷新/绑定问题。
当我使用datatables和datagrid时,我总是使用以下
//ctor or init
dt = ds.Tables["FooTable"];
//the next line you have to write after you initialize your datatable
this.MyView = (BindingListCollectionView)CollectionViewSource.GetDefaultView(this.dt);
XAML
<DataGrid ItemsSource="{Binding MyView }"/>
刷新
this.MyView.Refresh();
编辑: MyView是一个属性
public BindingListCollectionView MyView
{
get {return this._myview;}
set {this._myview = value; OnPropertyChanged("MyView");
}
你可以在代码中做绑定。
Binding myBinding = new Binding("MyView");
myBinding.Source = this;//the instance with the MyView property
mydatagridctrl.SetBinding(ItemsControl.ItemsSourceProperty, myBinding);
答案 1 :(得分:1)
您好我在other thread编辑了我的答案。
使用数据表,datagrid和wpf / mvvm时使用的一般方法:
我总是将datagrid itemssource绑定到数据表的BindingListCollectionView。 我这样做是因为我可以轻松过滤,刷新或添加/删除/修改数据表项。
答案 2 :(得分:0)
尝试将此添加到DataSet_Add_Click
方法
dg1.Items.Refresh();
答案 3 :(得分:-1)
请在最后调用dt.DataBind();
。