C# 将新的Datagrid行保存到数据库
在C WPF工作。好的,我有一个datagrid,它绑定到我项目中的一个实体框架。数据网格在更新显示的值时起作用。我使用MyDataEntity.SaveChanges将更改推送到数据库中,一切都很正常 添加新行时会出现此问题。我在XAML中设置了CanUserAddRows=True,因此用户可以添加新行。当我必须将新行保存到数据库时,问题就出现了。由于某些原因,SaveChanges调用不会更新数据库。我试图做的是将当前行的所有值拉入IList,然后访问各个值,这样我就可以调用MyDataEntities.Add'on TheRowedEnding`事件,但这会产生一些其他问题。主要是,我无法访问IList中的单个值。当我查看列表中的数据时,它就在那里,我已经看到了,我只是无法将它分配给任何东西 所以说真的,我的问题是双重的 1:如何将新输入的行保存到数据库中 2:如何访问IList中的值 2将是更好的解决方案,因为这样我可以使用以下代码填充数据库中的其他列,并将数据传递给其他方法以获取数据库中特定列的值C# 将新的Datagrid行保存到数据库,c#,wpf,entity-framework,datagrid,ilist,C#,Wpf,Entity Framework,Datagrid,Ilist,在C WPF工作。好的,我有一个datagrid,它绑定到我项目中的一个实体框架。数据网格在更新显示的值时起作用。我使用MyDataEntity.SaveChanges将更改推送到数据库中,一切都很正常 添加新行时会出现此问题。我在XAML中设置了CanUserAddRows=True,因此用户可以添加新行。当我必须将新行保存到数据库时,问题就出现了。由于某些原因,SaveChanges调用不会更新数据库。我试图做的是将当前行的所有值拉入IList,然后访问各个值,这样我就可以调用MyDataE
private void DataGrid_RowEditEnding(object sender, DataGridRowEditEndingEventArgs e)
{
IList rows = DataGrid.SelectedItems;
TableName tbl = new TableName
{
Name = rows[1].ToString(),
Qty = decimal.Parse(rows[4].ToString()),
Type = rows[6].ToString(),
TQty = ConvertQtoT(rows[4].ToString(), rows[6].ToString(),
OnLIst = true
};
MyDataEntity.TableNames.Add(tbl);
MyDataEntity.TableNames.SaveChanges();
}
}
您可以将新输入的行从datagrid保存到数据库中,如下所示: 首先将数据源分配给datagrid:
datagrid.ItemsSource = myview.GetList();
接下来选择Datagrid的SelectionChanged事件:
private void datagrid_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
objToAdd = datagrid.SelectedItem as clsName; //Entity Object
}
private void datagrid_CellEditEnding(object sender, DataGridCellEditEndingEventArgs e)
{
try
{
FrameworkElement element1 = datagrid.Columns[0].GetCellContent(e.Row);
if (element1.GetType() == typeof(TextBox))
{
var colomn1 = ((TextBox)element1).Text;
objToAdd.Column1 = Convert.ToInt32(Column1);
}
FrameworkElement element2 = datagrid.Columns[1].GetCellContent(e.Row);
if (element2.GetType() == typeof(TextBox))
{
var colomn2 = ((TextBox)element2).Text;
objToAdd.Column2 = Convert.ToInt32(Column2);
}
FrameworkElement element3 = datagrid.Columns[2].GetCellContent(e.Row);
if (element3.GetType() == typeof(TextBox))
{
var colomn3 = ((TextBox)element3).Text;
objToAdd.Column3 = Convert.ToInt32(Column3);
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
private void datagrid_RowEditEnding(object sender, DataGridRowEditEndingEventArgs e)
{
try
{
var Res = MessageBox.Show("Do you want to Create this new entry", "Confirm", MessageBoxButton.YesNo);
if (Res == MessageBoxResult.Yes)
{
EntityObject.InsertEmployee(objToAdd);
EntityObject.SaveChanges();
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
接下来选择Datagrid的CellEditEnding事件:
private void datagrid_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
objToAdd = datagrid.SelectedItem as clsName; //Entity Object
}
private void datagrid_CellEditEnding(object sender, DataGridCellEditEndingEventArgs e)
{
try
{
FrameworkElement element1 = datagrid.Columns[0].GetCellContent(e.Row);
if (element1.GetType() == typeof(TextBox))
{
var colomn1 = ((TextBox)element1).Text;
objToAdd.Column1 = Convert.ToInt32(Column1);
}
FrameworkElement element2 = datagrid.Columns[1].GetCellContent(e.Row);
if (element2.GetType() == typeof(TextBox))
{
var colomn2 = ((TextBox)element2).Text;
objToAdd.Column2 = Convert.ToInt32(Column2);
}
FrameworkElement element3 = datagrid.Columns[2].GetCellContent(e.Row);
if (element3.GetType() == typeof(TextBox))
{
var colomn3 = ((TextBox)element3).Text;
objToAdd.Column3 = Convert.ToInt32(Column3);
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
private void datagrid_RowEditEnding(object sender, DataGridRowEditEndingEventArgs e)
{
try
{
var Res = MessageBox.Show("Do you want to Create this new entry", "Confirm", MessageBoxButton.YesNo);
if (Res == MessageBoxResult.Yes)
{
EntityObject.InsertEmployee(objToAdd);
EntityObject.SaveChanges();
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
接下来选择Datagrid的RowEditEnding事件:
private void datagrid_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
objToAdd = datagrid.SelectedItem as clsName; //Entity Object
}
private void datagrid_CellEditEnding(object sender, DataGridCellEditEndingEventArgs e)
{
try
{
FrameworkElement element1 = datagrid.Columns[0].GetCellContent(e.Row);
if (element1.GetType() == typeof(TextBox))
{
var colomn1 = ((TextBox)element1).Text;
objToAdd.Column1 = Convert.ToInt32(Column1);
}
FrameworkElement element2 = datagrid.Columns[1].GetCellContent(e.Row);
if (element2.GetType() == typeof(TextBox))
{
var colomn2 = ((TextBox)element2).Text;
objToAdd.Column2 = Convert.ToInt32(Column2);
}
FrameworkElement element3 = datagrid.Columns[2].GetCellContent(e.Row);
if (element3.GetType() == typeof(TextBox))
{
var colomn3 = ((TextBox)element3).Text;
objToAdd.Column3 = Convert.ToInt32(Column3);
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
private void datagrid_RowEditEnding(object sender, DataGridRowEditEndingEventArgs e)
{
try
{
var Res = MessageBox.Show("Do you want to Create this new entry", "Confirm", MessageBoxButton.YesNo);
if (Res == MessageBoxResult.Yes)
{
EntityObject.InsertEmployee(objToAdd);
EntityObject.SaveChanges();
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
希望这将帮助您…您可以将新输入的行从datagrid保存到数据库中,如下所示: 首先将数据源分配给datagrid:
datagrid.ItemsSource = myview.GetList();
接下来选择Datagrid的SelectionChanged事件:
private void datagrid_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
objToAdd = datagrid.SelectedItem as clsName; //Entity Object
}
private void datagrid_CellEditEnding(object sender, DataGridCellEditEndingEventArgs e)
{
try
{
FrameworkElement element1 = datagrid.Columns[0].GetCellContent(e.Row);
if (element1.GetType() == typeof(TextBox))
{
var colomn1 = ((TextBox)element1).Text;
objToAdd.Column1 = Convert.ToInt32(Column1);
}
FrameworkElement element2 = datagrid.Columns[1].GetCellContent(e.Row);
if (element2.GetType() == typeof(TextBox))
{
var colomn2 = ((TextBox)element2).Text;
objToAdd.Column2 = Convert.ToInt32(Column2);
}
FrameworkElement element3 = datagrid.Columns[2].GetCellContent(e.Row);
if (element3.GetType() == typeof(TextBox))
{
var colomn3 = ((TextBox)element3).Text;
objToAdd.Column3 = Convert.ToInt32(Column3);
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
private void datagrid_RowEditEnding(object sender, DataGridRowEditEndingEventArgs e)
{
try
{
var Res = MessageBox.Show("Do you want to Create this new entry", "Confirm", MessageBoxButton.YesNo);
if (Res == MessageBoxResult.Yes)
{
EntityObject.InsertEmployee(objToAdd);
EntityObject.SaveChanges();
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
接下来选择Datagrid的CellEditEnding事件:
private void datagrid_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
objToAdd = datagrid.SelectedItem as clsName; //Entity Object
}
private void datagrid_CellEditEnding(object sender, DataGridCellEditEndingEventArgs e)
{
try
{
FrameworkElement element1 = datagrid.Columns[0].GetCellContent(e.Row);
if (element1.GetType() == typeof(TextBox))
{
var colomn1 = ((TextBox)element1).Text;
objToAdd.Column1 = Convert.ToInt32(Column1);
}
FrameworkElement element2 = datagrid.Columns[1].GetCellContent(e.Row);
if (element2.GetType() == typeof(TextBox))
{
var colomn2 = ((TextBox)element2).Text;
objToAdd.Column2 = Convert.ToInt32(Column2);
}
FrameworkElement element3 = datagrid.Columns[2].GetCellContent(e.Row);
if (element3.GetType() == typeof(TextBox))
{
var colomn3 = ((TextBox)element3).Text;
objToAdd.Column3 = Convert.ToInt32(Column3);
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
private void datagrid_RowEditEnding(object sender, DataGridRowEditEndingEventArgs e)
{
try
{
var Res = MessageBox.Show("Do you want to Create this new entry", "Confirm", MessageBoxButton.YesNo);
if (Res == MessageBoxResult.Yes)
{
EntityObject.InsertEmployee(objToAdd);
EntityObject.SaveChanges();
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
接下来选择Datagrid的RowEditEnding事件:
private void datagrid_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
objToAdd = datagrid.SelectedItem as clsName; //Entity Object
}
private void datagrid_CellEditEnding(object sender, DataGridCellEditEndingEventArgs e)
{
try
{
FrameworkElement element1 = datagrid.Columns[0].GetCellContent(e.Row);
if (element1.GetType() == typeof(TextBox))
{
var colomn1 = ((TextBox)element1).Text;
objToAdd.Column1 = Convert.ToInt32(Column1);
}
FrameworkElement element2 = datagrid.Columns[1].GetCellContent(e.Row);
if (element2.GetType() == typeof(TextBox))
{
var colomn2 = ((TextBox)element2).Text;
objToAdd.Column2 = Convert.ToInt32(Column2);
}
FrameworkElement element3 = datagrid.Columns[2].GetCellContent(e.Row);
if (element3.GetType() == typeof(TextBox))
{
var colomn3 = ((TextBox)element3).Text;
objToAdd.Column3 = Convert.ToInt32(Column3);
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
private void datagrid_RowEditEnding(object sender, DataGridRowEditEndingEventArgs e)
{
try
{
var Res = MessageBox.Show("Do you want to Create this new entry", "Confirm", MessageBoxButton.YesNo);
if (Res == MessageBoxResult.Yes)
{
EntityObject.InsertEmployee(objToAdd);
EntityObject.SaveChanges();
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
希望这能帮助您……数据网格没有内置的插入功能您必须实现自己的插入功能才能插入到您的收藏数据网格没有内置的插入功能您必须实现自己的插入功能才能插入到您的收藏这会有点。。。我仍然需要获得一些单元格值并将它们传递给其他方法。我是否可以解析IList的值并以这种方式传递它们?在上面的代码中,您可以正确地获得值本身。还是你需要的。请详细说明……我需要能够得到行中每个单元格的单个值。我不能直接把它推到数据库中,因为还有其他列没有显示,它们是根据输入的值填充的。因此,如果第1列中有一个值,我需要获取该值,然后将其传递给另一个方法进行转换,以获取要在第5列中插入的值。所以我真正需要的是一种访问行中各个值的方法。谢谢,我通过使用:FrameworkElement element1=datagrid.Columns[0].GetCellContente.Row;然后var column1=TextBoxelement1.Text;。谢谢你的帮助!!!!!这会有点。。。我仍然需要获得一些单元格值并将它们传递给其他方法。我是否可以解析IList的值并以这种方式传递它们?在上面的代码中,您可以正确地获得值本身。还是你需要的。请详细说明……我需要能够得到行中每个单元格的单个值。我不能直接把它推到数据库中,因为还有其他列没有显示,它们是根据输入的值填充的。因此,如果第1列中有一个值,我需要获取该值,然后将其传递给另一个方法进行转换,以获取要在第5列中插入的值。所以我真正需要的是一种访问行中各个值的方法。谢谢,我通过使用:FrameworkElement element1=datagrid.Columns[0].GetCellContente.Row;然后var column1=TextBoxelement1.Text;。谢谢你的帮助!!!!!