невозможно отправить выбранные строки сетки данных в базу данных, но отправить текст System.Windows.Controls.TextBlock - PullRequest
0 голосов
/ 01 мая 2018

Я хочу выделить строки Data-grid в DemoTest в SQL он не имеет ошибки при запуске, но когда я проверяю таблицу в SQL, я вижу текст, показанный на рисунке он не отправляет данные в DataGrid, но отправляет код system.Windows.Controls.TextBlock

использование GetCellContent неправильно? или я должен

с использованием WPF Entity FrameWork.

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

введите описание изображения здесь

1 Ответ

0 голосов
/ 01 мая 2018

Это происходит потому, что

DataGridInsRep.Columns[2].GetCellContent(DataGridInsRep.Items[i]) 

возвращает содержимое столбца, внутренне TextBlock (если не переопределено шаблоном ячейки).

Измените код на

var codeTextBlock = DataGridInsRep.Columns[2].GetCellContent(DataGridInsRep.Items[i]) as TextBlock;

Dtest.MCode = codeTextBlock.Text;

Вы должны сделать это для других свойств.

Однако другая перспектива здесь заключается в том, почему вы выбираете такие данные. Если ItemSrid ItemSource связан с коллекцией класса, то следующий код более читабелен:

var itemsSource = DataGridInsRep.ItemsSource as IEnumerable;
if (itemsSource != null)
{
    foreach (var item in itemsSource.OfType<YourClass>())
    {
        Dtest.MCode = item.MCode;
        //...
    }
}
...