2016-12-26 7 views
1

Я хотел бы создать редактируемые DataGrid, чьи клетки либо может быть только для чтения или редактирования (двойной щелчок) ... Я хочу, чтобы сохранить все Editted клеток в базу данных (с помощью Entity Framework) ...Как редактировать и сохранять WPF GridView, в базу данных?

то в некоторых столбцах мне нужно показать поле со списком вместо текстового поля.

Как я могу достичь этого?

ответ

2

Зависит от использования MVVM или нет.

В любом случае вам необходимо определить, как вы хотите сохранить. Есть кнопка сохранения? Или редактирование сохраняется, как только они сделаны. (последний ужасен для вашей БД, но до вас)

Редактирование создает событие, которое вы можете захватить. Также нажатие на кнопку сохранения создает событие.

SAVE BUTTON Так что давайте предположим, что вы хотите кнопку сохранения.

Ну, тогда, когда происходит событие нажатия кнопки, вы вызываете код, чтобы сохранить его. Не зная своего дБ, я не могу сказать вам больше, кроме того, что это нужно обрабатывать в другом потоке, поэтому этого не происходит в потоке пользовательского интерфейса. Посмотрите на Task.Run для получения дополнительной информации.

SAVE ON EDIT В основном то же, что и выше, но вы в конечном итоге разговариваете с вашим db гораздо чаще. Каждое нажатие клавиши действительно, вот почему это сложнее на вашем дБ. В основном ваш захват событий нажатия клавиш или клавиш, а затем сохранение информации в вашей БД.

+0

Большое вам спасибо за вашу помощь. Я не использую MVVM, а моя база данных - SQL Server. –

1

использовать этот код:

public class Window2Viewmodel : INotifyPropertyChanged 
    { 
     public Window2Viewmodel() 
     { 
      MyDbContext myDbContext = new MyDbContext(); 
      Customers = new ObservableCollection<Customer>(myDbContext.Customers.Include("Cars").ToList()); 
      SaveCommand = new RelayCommand(() => 
      { 
       myDbContext.SaveChanges(); 
      }); 
     } 

     private ObservableCollection<Customer> _customers; 

     public ObservableCollection<Customer> Customers 
     { 
      get { return _customers; } 
      set 
      { 
       if (_customers != value) 
       { 
        _customers = value; 
        OnPropertyChanged(); 
       } 
      } 
     } 


     public event PropertyChangedEventHandler PropertyChanged = delegate { }; 
     public void OnPropertyChanged([CallermemberNmae]string propertyName = null) 
     { 
      PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); 
     } 

     public RelayCommand SaveCommand { get; set; } 
    } 

И этот XAML код:

<Window.Resources> 
     <local:Window2Viewmodel x:Key="VM"/> 
    </Window.Resources> 
    <Grid DataContext="{Binding Source={StaticResource VM}}"> 
     <DataGrid Name="testDataGrid" ItemsSource="{Binding Customers}" AutoGenerateColumns="False"> 
      <DataGrid.Columns> 
       <DataGridTextColumn Binding="{Binding FName}" Header="Name"/> 
       <DataGridTextColumn Binding="{Binding LName}" Header="Lastname"/> 
      </DataGrid.Columns> 
     </DataGrid> 
     <Button Content="Save" VerticalAlignment="Bottom" Command="{Binding SaveCommand}"/> 
    </Grid> 
+0

Спасибо за вашу помощь, можете ли вы дать мне полный пример кода? –