繁体   English   中英

将新的Datagrid行保存到数据库

[英]Save a new Datagrid Row to database

C# WPF工作。 好的,我有一个datagrid绑定到我的项目中的entity framework 更新显示的值时,数据网格功能非常棒。 我使用MyDataEntity.SaveChanges()将更改推送到database ,一切正常。

添加新行时会出现此问题。 我在我的XAML中设置了CanUserAddRows="True" ,因此用户可以添加新行。 当我必须将新行保存到数据库时,问题就来了。 出于某种原因, SaveChanges()调用不会更新数据库。 我试图做的是将当前行的所有值拉入IList然后访问各个值,以便我可以MyDataEntities.Add()' on the RowEditEnding`事件MyDataEntities.Add()' on the调用MyDataEntities.Add()' on the ,但这会产生一些其他问题。 主要是,我无法访问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(); 
    }
}

您可以从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); 
        }
    }

希望这个能对您有所帮助...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM