c# WPF DataGrid (ItemsSource = Database Table) -附加列:如何在对Data
本文关键字:Data DataGrid WPF ItemsSource Table Database | 更新日期: 2023-09-27 18:14:23
这里有一个棘手的问题:我有一个DataGrid正在填充(DataGrid. itemssource)由一个访问表。
为用户显示附加列并在(重新)排序时保留该列的更改的最佳实践是什么?
在我的例子中,额外的列是用户的CheckBoxColumn,用于选择他想要编辑的DataGrid中的那些行。如果对DataGrid进行排序,检查就会消失。
代码:using (OleDbConnection connection = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + AppDomain.CurrentDomain.BaseDirectory + "Test.accdb"))
{
string strDbCmd = "SELECT * FROM Table1";
OleDbDataAdapter daOleDb = new OleDbDataAdapter(strDbCmd, connection);
DataTable dtResult = new DataTable(); // this is actually a global
daOleDb.FillSchema(dtResult, SchemaType.Source);
daOleDb.Fill(dtResult);
DataGrid1.ItemsSource = dtResult.DefaultView;
DataGridCheckBoxColumn dgCol = new DataGridCheckBoxColumn();
DataGrid1.Columns.Insert(0, dgCol);
}
我不能改变dresult(这实际上是一个全局),因为我以后将使用它来更新数据库:
// Later on somewhere else:
OleDbDataAdapter daOleDb = new OleDbDataAdapter(strDbCmd, connection);
// [...]
daOleDb.Update(dtResult);
现在我当然可以将所有检查存储在bool数组或任何东西中,但是是否有一个聪明的解决方案可以在对DataGrid排序时保持检查设置?
类型的问候!
我想我已经想出了一个很好的解决方案:
填满DataTable后,手动添加bool列:
// [...]
daOleDb.Fill(dtResult);
DataColumn dtCol = new DataColumn("Bool", typeof(Boolean));
dtCol.DefaultValue = false;
dtResult.Columns.Add(dtCol);
dtCol.SetOrdinal(0);
DataGrid1.ItemsSource = dtResult.DefaultView;
这不会影响"RowsChanged"事件,因为它是一个添加的列,在执行
之前daOleDb.Update(dtResult);
您可以简单地删除/删除它(应该没有任何区别,因为添加的列在删除时也不会影响任何ChangesEvent)
dtResult.Columns[0].Remove(); // or Columns.Delete(...)