2016-12-26 3 views
1

Je voudrais créer DataGrid modifiable dont les cellules peuvent être soit en lecture seule ou modifiables (par un double-clic) ... Je veux sauver la base de données toutes les cellules editted, (via Entity Framework) ...Comment modifier et enregistrer WPF GridView, à la base de données?

Ensuite, dans certaines colonnes, j'ai besoin de montrer un combobox au lieu d'un champ de texte.

Comment puis-je y parvenir?

Répondre

2

Dépend de si vous utilisez MVVM ou non.

De toute façon, vous devez déterminer comment vous souhaitez enregistrer. Y a-t-il un bouton de sauvegarde? Ou les modifications sont-elles sauvegardées dès qu'elles sont faites? (le dernier est horrible pour votre DB mais jusqu'à vous)

Les éditions produisent un événement que vous pouvez capturer. Un clic sur le bouton Enregistrer produit également un événement.

ENREGISTRER BOUTON Supposons que vous vouliez un bouton de sauvegarde.

Eh bien, lorsque l'événement de clic sur un bouton se produit, vous appelez le code à enregistrer sur votre db. Sans connaître votre base de données, je ne peux pas vraiment vous en dire plus, sauf que cela devrait être cultivé dans un thread différent, donc cela ne se produit pas sur le thread de l'interface utilisateur. Regardez Task.Run pour plus d'informations.

ENREGISTREZ SUR EDIT Fondamentalement la même chose que ci-dessus mais vous finirez par parler beaucoup plus souvent à votre db. Chaque touche vraiment, c'est pourquoi c'est plus dur sur votre db. Fondamentalement, vous piégeant les événements keypress ou keyup, puis enregistrez les informations sur votre base de données.

+0

Merci beaucoup pour votre aide. Je n'utilise pas MVVM et ma base de données est SQL Server. –

1

utilisent ce code:

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

Ce code 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

Merci pour votre aide, pouvez-vous me donner un exemple de code complet? –