1

で働いていC# WPFます。わかりましたので、私のプロジェクトで にdatagridバインドされている があります。entity framework表示される値を更新するとき、データグリッドは素晴らしい機能を果たします。database変更を使用 にプッシュするMyDataEntity.SaveChanges()と、すべてが完全に機能します。

新しい行を追加するときに問題が発生します。XAML で設定CanUserAddRows="True"したので、ユーザーは新しい行を追加できます。新しい行をデータベースに保存する必要があるときに問題が発生します。何らかの理由で、SaveChanges()呼び出しはデータベースを更新しません。私がやろうとしたことは、現在の行のすべての値を にプルしてからIList、個々の値にアクセスしてMyDataEntities.Add()' on theRowEditEnding` イベントを呼び出せるようにすることでしたが、それによって他の問題が発生しました。主に、IList の個々の値にアクセスできません。リスト内のデータを見ると、そこにあります。見たことがありますが、何にも割り当てることができません。

本当に、私の問題は2つあります。

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(); 
    }
}
4

1 に答える 1

5

次のように、新しく入力した行をデータグリッドからデータベースに保存できます。

最初にデータソースをデータグリッドに割り当てます:

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); 
        }
    }

これがあなたを助けることを願っています...

于 2013-08-26T08:51:24.043 に答える