2016-12-26 14 views
1

나는 ... 나는 (엔티티 프레임 워크를 통해), 데이터베이스에 편집 해 모든 셀을 저장할 ... 누구의 세포 중 하나를 읽기 전용하거나 편집 (DoubleClicking에 의해) 편집 가능한 데이터 그리드를 만들 싶습니다WPF GridView를 편집하고 데이터베이스에 저장하는 방법은 무엇입니까?

그런 다음 일부 열에서는 텍스트 필드 대신 콤보 상자를 표시해야합니다.

어떻게해야합니까?

답변

2

MVVM을 사용하는지 여부에 따라 다릅니다.

어느 쪽이든 저장 방법을 결정해야합니다. 저장 버튼이 있습니까? 또는 편집이 완료되는 즉시 저장됩니다. (마지막 하나는 당신의 DB에 달려 있지만 당신에게 달렸습니다.)

편집하면 캡처 할 수있는 이벤트가 생성됩니다. 저장 버튼을 클릭하면 이벤트가 생성됩니다.

저장 버튼 그래서 저장 버튼이 필요하다고 가정합니다.

그럼 버튼 클릭 이벤트가 발생하면 코드를 호출하여 db에 저장합니다. db를 알지 못하면 UI 스레드에서 발생하지 않도록이 스레드를 다른 스레드로 만들어야한다는 점을 제외하면 훨씬 더 많은 것을 말할 수는 없습니다. 자세한 정보는 Task.Run을보십시오.

편집 저장 기본적으로 위와 동일하지만 더 자주 대화를 끝낼 것입니다. 각 키 누르기는 실제로 당신의 DB에서 더 힘들게하는 이유입니다. 기본적으로 keypress 또는 keyup 이벤트를 트래핑 한 다음 정보를 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

도움을 주셔서 감사합니다. 완전한 예제 코드를 제공해 주시겠습니까? –