I want to select rows of Data-grid into DemoTest in SQL it has no error in starting it but as i check the table in SQL i see the text showed in image. it doesn't send the data in the DataGrid but it send the code system.Windows.Controls.TextBlock
using GetCellContent is wrong? or should i
using 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");
}
It happens because
DataGridInsRep.Columns[2].GetCellContent(DataGridInsRep.Items[i])
returns the Column Content which is internally TextBlock
(if not override by Cell Template).
Change the code to
var codeTextBlock = DataGridInsRep.Columns[2].GetCellContent(DataGridInsRep.Items[i]) as TextBlock;
Dtest.MCode = codeTextBlock.Text;
You should do it for other properties.
However, another perspective here is that why are you fetching the data like this. If the DataGrid's ItemSource is bound to Collection of class, then following code is more readable:
var itemsSource = DataGridInsRep.ItemsSource as IEnumerable;
if (itemsSource != null)
{
foreach (var item in itemsSource.OfType<YourClass>())
{
Dtest.MCode = item.MCode;
//...
}
}