2013-08-25 25 views
0

C#WPF中工作。好的,我有一个datagrid,它在我的项目中绑定到entity framework。当更新显示的值时,datagrid函数很棒。我使用MyDataEntity.SaveChanges()将更改推送到database,一切正常。将新的Datagrid行保存到数据库中

添加新行时出现问题。我在我的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

数据网格不中内置了您插入功能必须实现自己的插入函数插入到你的集合 –

回答

1

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

希望这将帮助你...

+0

这将工作的一种......我仍然需要获得一些单元格值并将它们传递给其他方法。无论如何,我可以解析IList的价值观并通过它们来传递它们吗? –

+0

在上面的代码中,你可以得到正确的值。仍然是你需要的。请详细说明...... – Krish

+0

我需要能够获得该行中每个单元格的单个值。我不能直接将它直接推入数据库,因为还有其他列没有显示,根据输入的值填充。因此,如果列1中有一个值,我需要获取该值,然后将其传递给另一个方法以进行转换,以便在第5列中插入值。所以我真正需要的是访问各个值的方法在行中。谢谢 –