我想在SQL中选择数据网格行到DemoTest中 它在启动时没有错误但是当我在SQL中查看表时,我看到文本显示在图像中。它不会在DataGrid中发送数据,但它会发送代码system.Windows.Controls.TextBlock
使用GetCellContent是错误的?或者我应该
使用WPF实体框架。
private void btn_SendWorkOrder_Click(object sender, RoutedEventArgs e)
{
DemoTest Dtest = new DemoTest();
CheckBox mChkBox = new CheckBox();
for (int i = 0; i < DataGridInsRep.Items.Count - 1; i++)
{
mChkBox = DataGridInsRep.Columns[0].GetCellContent(DataGridInsRep.Items[i]) as CheckBox;
if (mChkBox.IsChecked == true)
{
Dtest.MCode = Convert.ToString(DataGridInsRep.Columns[2].GetCellContent(DataGridInsRep.Items[i]));
Dtest.MName = Convert.ToString(DataGridInsRep.Columns[3].GetCellContent(DataGridInsRep.Items[i]));
Dtest.McName = Convert.ToString(DataGridInsRep.Columns[5].GetCellContent(DataGridInsRep.Items[i]));
Dtest.PDesc = Convert.ToString(DataGridInsRep.Columns[6].GetCellContent(DataGridInsRep.Items[i]));
//Dtest.McCode = Convert.ToInt32(DataGridInsRep.Columns[4].GetCellContent(DataGridInsRep.Items[i]));
database.DemoTests.Add(Dtest);
}
}
database.SaveChanges();
MessageBox.Show("may check it");
}
答案 0 :(得分:0)
这是因为
DataGridInsRep.Columns[2].GetCellContent(DataGridInsRep.Items[i])
返回内部TextBlock
的列内容(如果没有被单元格模板覆盖)。
将代码更改为
var codeTextBlock = DataGridInsRep.Columns[2].GetCellContent(DataGridInsRep.Items[i]) as TextBlock;
Dtest.MCode = codeTextBlock.Text;
您应该为其他属性执行此操作。
但是,另一个观点是,为什么要提取这样的数据。如果DataGrid的ItemSource绑定到类的集合,那么下面的代码更具可读性:
var itemsSource = DataGridInsRep.ItemsSource as IEnumerable;
if (itemsSource != null)
{
foreach (var item in itemsSource.OfType<YourClass>())
{
Dtest.MCode = item.MCode;
//...
}
}