2013-08-25 2 views
0

Работа в C#WPF. Хорошо, поэтому у меня есть datagrid, который привязан к entity framework в моем проекте. Функции datagrid являются удивительными при обновлении отображаемых значений. Я нажимаю изменения на database, используя MyDataEntity.SaveChanges(), и все работает отлично.Сохранить новую строку Datagrid в базе данных

Проблема возникает при добавлении новой строки. Я установил CanUserAddRows="True" в свой XAML, чтобы пользователь мог добавлять новые строки. Проблема возникает, когда мне нужно сохранить новые строки в базе данных. По какой-то причине вызов 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:

datagrid.ItemsSource = myview.GetList(); 

Затем выберите SelectionChanged событие из Datagrid:

private void datagrid_SelectionChanged(object sender, SelectionChangedEventArgs e) 
{ 
    objToAdd = datagrid.SelectedItem as clsName; //Entity Object 
} 

Далее выберите CellEditEnding Event of Datagrid:

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

Затем выберите RowEditEnding Событие Datagrid:

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

Мне нужно иметь возможность получать индивидуальные значения каждой из ячеек в строке. Я не могу просто нажать его прямо в базу данных, потому что есть другие столбцы, которые отображаются arent, которые заполняются на основе введенных значений. Поэтому, если в столбце 1 есть значение, мне нужно получить это значение, а затем передать его другому методу, чтобы сделать преобразование, чтобы получить значение для вставки в столбце 5. Таким образом, мне действительно нужен способ доступа к отдельным значениям в строке. спасибо –

 Смежные вопросы

  • Нет связанных вопросов^_^