无法将选定的datagrid行发送到数据库,但发送System.Windows.Controls.TextBlock

时间:2018-05-01 12:04:26

标签: c# wpf wpfdatagrid

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

enter image description here

1 个答案:

答案 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;
        //...
    }
}