Bonjour à tous, je me tourne à nouveau vers vous car je suis coincé et j'aimerais un peu d'aide. j'ai en fait 2 questions:
- La première est simple, j'utilise Visual Studio 2017 et je n'ai pas de datagridview. Est-ce normal?
- La seconde concerne de la programmation:
Voilà j'essaie de développer un programme de gestion de comptes bancaires en C# en utilisant le pattern MVVM. j'ai créer une base données "Gestion" contenant une table "Entree". Pour le design j'ai un usercontrol "UserControlEntree" dont le xaml est le suivant:
Code :
- <UserControl x:Class="CompteBancaire.Views.UserControleEntree"
- xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
- xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
- xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
- xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
- xmlns:local="clr-namespace:CompteBancaire.Views"
- mc:Ignorable="d"
- d:DesignHeight="450" d:DesignWidth="800"
- DataContext="{Binding Source={StaticResource ServiceLocator},
- Path=UserControlEntreeViewModel}">
- <UserControl.Resources>
- <SolidColorBrush x:Key="ColorEntrees" Color="#FF83FD68" Opacity="0.5"/>
- <SolidColorBrush x:Key="BrushTextEntree" Color="#FF037C03"/>
- <SolidColorBrush x:Key="BrushBackGroundEntree" Color="#FF72EC6C" Opacity="0.75"/>
- <SolidColorBrush x:Key="BrushBackgroundMenu" Color="#FF18706C" Opacity="0.05"/>
- </UserControl.Resources>
- <Border>
- <Grid x:Name="GrilleEntree">
- <Grid.RowDefinitions>
- <RowDefinition Height="30"/>
- <RowDefinition Height=" *"/>
- </Grid.RowDefinitions>
- <Label Foreground="{DynamicResource BrushTextEntree}" HorizontalAlignment="Center" VerticalAlignment="Center" Content="Entrées " FontStyle="Italic" FontSize="14" FontWeight="Bold" FontFamily="Segoe Print" Grid.ColumnSpan="2" />
- <DataGrid x:Name="DataGridEntree"
- ItemsSource="{Binding ItemEntree, Mode=TwoWay }"
- Margin="0,5" Grid.Row="1" BorderBrush="#FF037C03" Foreground="{DynamicResource BrushTextEntree}" AutoGenerateColumns="False" VerticalGridLinesBrush="{DynamicResource BrushTextEntree}" Width="350" FrozenColumnCount="1" HorizontalGridLinesBrush="{DynamicResource BrushTextEntree}" MaxHeight="350" HeadersVisibility="Column" FontFamily="Segoe Print" AreRowDetailsFrozen="True" Grid.ColumnSpan="2" HorizontalAlignment="Center"
- SelectedItem="{Binding IdEntree}" SelectionMode="Single" >
-
- <DataGrid.RowBackground>
- <SolidColorBrush Color="#FF037C03" Opacity="0.05"/>
- </DataGrid.RowBackground>
- <DataGrid.AlternatingRowBackground>
- <SolidColorBrush Color="#FF037C03" Opacity="0.3"/>
- </DataGrid.AlternatingRowBackground>
- <DataGrid.Background>
- <SolidColorBrush Color="#FF72EC6C" Opacity="0.75"/>
- </DataGrid.Background>
- <DataGrid.Columns>
- <DataGridCheckBoxColumn ClipboardContentBinding="{x:Null}" Header="Valid." Width="50"
- Binding= "{Binding ValidationEntree, Mode=TwoWay}"/>
-
- <DataGridTextColumn
- Binding="{Binding OperationEntree, Mode=TwoWay}"
- ClipboardContentBinding="{x:Null}" Foreground="{DynamicResource BrushTextEntree}" FontFamily="Segoe Print" Header="Opération" Width="200" CanUserResize="True" CanUserReorder="True" />
- <DataGridTextColumn
- Binding="{Binding CreditEntree, Mode=TwoWay}"
- ClipboardContentBinding="{x:Null}" Foreground="{DynamicResource BrushTextEntree}" FontFamily="Segoe Print" Header="Crédit" Width="98" FontWeight="Bold"/>
- </DataGrid.Columns>
- </DataGrid>
- </Grid>
- </Border>
- </UserControl>
|
j'ai lié ce dernier à un ViewModel dont le code est:
Code :
- using CompteBancaire.DAL;
- using CompteBancaire.Model;
- using GalaSoft.MvvmLight;
- using GalaSoft.MvvmLight.Command;
- using System;
- using System.Collections.Generic;
- using System.Collections.ObjectModel;
- using System.ComponentModel;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using System.Windows.Input;
- namespace CompteBancaire.ViewModel
- {
- public class UserControlEntreeViewModel : ViewModelBase
- {
- #region Constructeur
- public UserControlEntreeViewModel()
- {
- SetSourceEntree();
- }
- #endregion
- #region Champs
- private ObservableCollection<CollectionEntree> itemEntree = new ObservableCollection<CollectionEntree>();
- private int idEntree;
- #endregion
- #region Variables
- // Nom de la base de données
- public string NomBase="Gestion.mdf";
- #endregion
- #region Getter et setter pour les bases de données
- public ObservableCollection<CollectionEntree> ItemEntree
- {
- set
- {
- if (itemEntree != value)
- {
- itemEntree = value;
- RaisePropertyChanged("ItemEntree" );
- }
- }
- get
- {
- return itemEntree;
- }
- }
- public int IdEntree
- {
- set
- {
- idEntree = value;
- RaisePropertyChanged("IdEntree" );
- }
- get
- {
- return idEntree;
- }
- }
- #endregion
- #region Affichage des entrées
-
- private void SetSourceEntree()
- {
- GestionContext BddGestion = new GestionContext(NomBase);
- int ComptEntree = BddGestion.Entrees.Count<Entree>();
- var query = (from c in BddGestion.Entrees select c).ToList();
- for (int i = 0; i < ComptEntree; ++i)
- {
- ItemEntree.Add(new CollectionEntree { ValidationEntree = (query[i].Validation), OperationEntree = query[i].Operation, CreditEntree = query[i].Credit });
- }
- }
- #endregion
-
- }
- }
|
le datagrid se rempli sans problème et affiche bien les données de ma table "Entree".
Voici ce que j'aimerais faire:
Lorsqu'un utilisateur entre de nouvelles données de le datagrid et qu'il appui sur ENTER il faudrait que la base de donnée se mette à jour.
J'ai essayé plein de choses mais rien ne fonctionne. De plus j'ai l'impression que mon observablecollection ne détecte pas les changements.
Il y a certainement un événement déclenché par l'appui sur ENTER mais je ne trouve pas.
J'espère avoir été assez clair.
Merci d'avance pour votre aide