在C#
WPF
工作。好吧,我有一个datagrid
,它绑定到我项目中的entity framework
。更新显示的值时,数据网格功能非常棒。我使用database
将更改推送到MyDataEntity.SaveChanges()
,一切正常。
添加新行时会出现此问题。我在我的XAML中设置了CanUserAddRows="True"
,因此用户可以添加新行。当我必须将新行保存到数据库时,问题就来了。出于某种原因,SaveChanges()
调用不会更新数据库。我尝试做的是将当前行的所有值拉入IList
,然后访问各个值,以便我可以调用MyDataEntities.Add()' on the
RowEditEnding`事件,但这会产生一些其他问题。主要是,我无法访问IList中的各个值。当我查看列表中的数据时,它就在那里,我已经看过了,我只是无法将它分配给任何东西。
所以,我的问题是双重的。
1:如何将新输入的行保存到我的数据库
2:如何访问IList中的值
2将是一个更好的解决方案,因为这样我可以使用以下代码填充数据库中的其他列,并将数据传递给其他方法以获取数据库中特定列的值。
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();
}
}
答案 0 :(得分:2)
您可以从datagrid将新输入的行保存到数据库中,如下所示:
首先将数据源分配给datagrid:
datagrid.ItemsSource = myview.GetList();
接下来选择Datagrid的SelectionChanged事件:
private void datagrid_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
objToAdd = datagrid.SelectedItem as clsName; //Entity Object
}
接下来选择Datagrid的CellEditEnding事件:
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);
}
}
接下来选择Datagrid的RowEditEnding事件:
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);
}
}
希望这会对你有帮助......