2013-08-25 55 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列中插入值。所以我真正需要的是訪問各個值的方法在行中。謝謝 –