Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 10 sur 10
  1. #1
    Membre actif
    Inscrit en
    février 2006
    Messages
    294
    Détails du profil
    Informations forums :
    Inscription : février 2006
    Messages : 294
    Points : 190
    Points
    190

    Par défaut Datagrid compréhension ligne

    Bonsoir ,

    J'essaie de réaliser un datagrid avec deux boutons , l'un servant à ajouter une ligne et l'autre à capturer la ligne sélèctionnée pour la supprimer , mon problème se situe sur l'ajout à chaque fois , je n'arrive qu'ajouter des colonnes et non une ligne en appuyant sur le bouton ajout.

    J'avoue le datagrid est pas facile à comprendre.

    J'applique la fonction Add mais il ajouter que des ligne sur une colonne et pas une ligne , contenant les colonnes des entêtes, pourtant j'ai un datagrid et des entêtes.

    Merci pour tous conseils utiles.

  2. #2
    Expert Confirmé


    Homme Profil pro Eric Metz
    Développeur informatique
    Inscrit en
    avril 2006
    Messages
    924
    Détails du profil
    Informations personnelles :
    Nom : Homme Eric Metz
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Santé

    Informations forums :
    Inscription : avril 2006
    Messages : 924
    Points : 3 246
    Points
    3 246

    Par défaut

    Bonjour,

    Si vous nous montriez votre code on pourrait mieux vous aider
    Articles sur les technologies .NET

    Une réponse vous a aidé ? utilisez le bouton

    Votre problème est résolu ? utilisez le bouton

  3. #3
    Membre actif
    Inscrit en
    février 2006
    Messages
    294
    Détails du profil
    Informations forums :
    Inscription : février 2006
    Messages : 294
    Points : 190
    Points
    190

    Par défaut

    J'ai un DataGrid et deux boutons l'un ajouter une ligne et l'autre supprimer une ligne de ma DataGrid.

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
      <DataGrid x:Name="datagrid_conteneur" HorizontalAlignment="Left" Margin="308,182,0,0" VerticalAlignment="Top" Height="98" Width="683" RenderTransformOrigin="0.5,0.5" Background="White" BorderThickness="2" ScrollViewer.VerticalScrollBarVisibility="Auto"
            ScrollViewer.HorizontalScrollBarVisibility="Auto">
                <DataGrid.Columns>
                    <DataGridTextColumn Binding="{x:Null}" ClipboardContentBinding="{x:Null}" Header="N°" IsReadOnly="True" CanUserSort="False"/>
                    <DataGridTextColumn Binding="{x:Null}" ClipboardContentBinding="{x:Null}" Header="N ° FABRICATION" CanUserSort="False"/>
                    <DataGridTextColumn Binding="{x:Null}" ClipboardContentBinding="{x:Null}" Header="POIDS" CanUserSort="False"/>
                    <DataGridTextColumn Binding="{x:Null}" ClipboardContentBinding="{x:Null}" Header="CAPACITE" CanUserSort="False"/>
                    <DataGridComboBoxColumn ClipboardContentBinding="{x:Null}" Header="TYPE" SelectedValueBinding="{x:Null}" SelectedItemBinding="{x:Null}" TextBinding="{x:Null}" CanUserSort="False"/>
                    <DataGridTextColumn Binding="{x:Null}" ClipboardContentBinding="{x:Null}" Header="DNC" CanUserSort="False"/>
                    <DataGridTextColumn Binding="{x:Null}" ClipboardContentBinding="{x:Null}" Header="PROMO" CanUserSort="False"/>
                    <DataGridTextColumn Binding="{x:Null}" ClipboardContentBinding="{x:Null}" Header="PRIX" CanUserSort="False"/>
                    <DataGridComboBoxColumn ClipboardContentBinding="{x:Null}" Header="DECHET" SelectedValueBinding="{x:Null}" SelectedItemBinding="{x:Null}" TextBinding="{x:Null}" CanUserSort="False"/>
                    <DataGridCheckBoxColumn Binding="{x:Null}" ClipboardContentBinding="{x:Null}" Header="SELECTIONNER " CanUserSort="False"/>
                </DataGrid.Columns>
    Ce que j'aimerai savoir faire , mais je n'y parviens pas , c'est que quand je clique sur mon bouton ajouter sur mon interface , une ligne de cette table soit ajouté et ses colonnes et qu'on puisse écrire sur chaque champ de mes colonnes.
    Bien sûr , j'ai créé chaque header de mon DataGrid avec le champ que je désire , en utilisant les propriétés
    J'ai essayé pleins de trucs mais le comportement d'un DataGrid est différent d'un Jtable...

    Merci

  4. #4
    Membre Expert
    Homme Profil pro Mickael
    Développeur .NET
    Inscrit en
    novembre 2009
    Messages
    815
    Détails du profil
    Informations personnelles :
    Nom : Homme Mickael
    Âge : 25
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : novembre 2009
    Messages : 815
    Points : 1 520
    Points
    1 520

    Par défaut

    Le binding "null" sur les DataGridTextColumn Binding="{x:Null}" , il sert à quoi?
    Normalement il devrait être binder (mode TwoWay) sur une des propriétés d'un objet à afficher (une row).
    Il faut spécifier à la datagrid quelle ItemsSource utiliser, en l'occurence une ObservableCollection<TonObjet> va faire l'affaire.

    Ensuite sur l'evennement de ton bouton ajouter, il te suffit de faire

    ObservableCollection.Add(new TonObjet(NouvelleId));

    Pour la suppression tu peux voir si tu ne peux pas caster le SelectedItem de la datagrid en TonObjet. Il suffit ensuite de faire ObservableCollection.Remove(l'objet).

  5. #5
    Membre actif
    Inscrit en
    février 2006
    Messages
    294
    Détails du profil
    Informations forums :
    Inscription : février 2006
    Messages : 294
    Points : 190
    Points
    190

    Par défaut

    Merci de ta réponse ,

    En fait le binding null se met automatiquement , quand je crée mes noms de mes colonnes dans les propriétés de visual studio de la Datagrid.

    Est-ce que , ce que tu me dis permet à l'utilisateur d'avoir la possibilité d'insérer des données colonne par colonne ,une fois appuyé sur le bouton ajouté ? j'ai des comboBox , text , etc ?

    merci.

  6. #6
    Membre Expert
    Homme Profil pro Mickael
    Développeur .NET
    Inscrit en
    novembre 2009
    Messages
    815
    Détails du profil
    Informations personnelles :
    Nom : Homme Mickael
    Âge : 25
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : novembre 2009
    Messages : 815
    Points : 1 520
    Points
    1 520

    Par défaut

    Je ne comprends pas la question
    Voici un article qui détail pas mal la datagrid:

    http://www.codeproject.com/Articles/...tical-Examples

  7. #7
    Membre actif
    Inscrit en
    février 2006
    Messages
    294
    Détails du profil
    Informations forums :
    Inscription : février 2006
    Messages : 294
    Points : 190
    Points
    190

    Par défaut

    Cela me semble compliqué pour ce que je veux faire

    Ce que je veux , c'est que quand un utilisateur clique sur le bouton ajout , une ligne s'insère dans ma datagrid avec les champs (comboxBox , etc par colonne spécifique ) et qu'il puisse rentrer les données , sélectionner dans un comboBox, etc)

    Actuellement , j'arrive à insérer une ligne mais je ne sais pas écrire des données dans chaque champ de mon datagrid et je n'ai pas de comboBox,checkBox etc alors que j'ai spécifié les header des colonnes pour qu'il puisse avoir des types différents que je veux par colonne.

    Mon datagrid ne doit pas être lié à une source de donnée ,parce que l'utilisateur doit ajouter lui-même les lignes et remplir les champs , puis après je les mets dans la base de donnée, à moins que j'ai pas bien compris l'intérêt du binding.

    Est-ce que ce que tu me dis plus haut correspond à ce que je veux ? , c'est un table avec ajout de ligne et remplir les colonnes.

  8. #8
    Membre Expert
    Homme Profil pro Mickael
    Développeur .NET
    Inscrit en
    novembre 2009
    Messages
    815
    Détails du profil
    Informations personnelles :
    Nom : Homme Mickael
    Âge : 25
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : novembre 2009
    Messages : 815
    Points : 1 520
    Points
    1 520

    Par défaut

    Code :
    ne doit pas être lié à une source de donnée
    Ben si justement, ici une source de donné represente simplement une collection. Ensuite avec cette collection tu fais ce que tu veux ( la rentrer en BDD, l'envoyer à un webservice...). Le binding va te permetre de faire le lien entre cette collection et la datagrid.

    L'objet correspondant à une row implémente-t-il bien INotifyPropertyChanged? Le binding est-il bien en TwoWay?

    Je ne connais pas le JTable, mais ca m'a l'air sacrément différent comme principe, et je pense que tu vas devoir saisir la nuance pour arriver à tes fins.

  9. #9
    Membre actif
    Inscrit en
    février 2006
    Messages
    294
    Détails du profil
    Informations forums :
    Inscription : février 2006
    Messages : 294
    Points : 190
    Points
    190

    Par défaut

    Merci pour tes réponses , je me demandais quel composant serait plus proche de mon utilisation entre le datagrid et le gridview ? et quelle est la différence entre les deux ? , je n'ai pas très bien compris.

    Merci, si tu sais plus à ce sujet.

    L'objet correspondant à une row implémente-t-il bien INotifyPropertyChanged? Le binding est-il bien en TwoWay?
    Désolé , je ne vois pas ce que c'est INotifyPropertyChanged? et le binding TwoWay ?

  10. #10
    Expert Confirmé


    Homme Profil pro Eric Metz
    Développeur informatique
    Inscrit en
    avril 2006
    Messages
    924
    Détails du profil
    Informations personnelles :
    Nom : Homme Eric Metz
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Santé

    Informations forums :
    Inscription : avril 2006
    Messages : 924
    Points : 3 246
    Points
    3 246

    Par défaut

    Quand tu effectues un binding entre un composant et une source de données, il est pratique de définir comment chacun sera mis à jour quand des modifications ont lieu d'un coté ou de l'autre. Plusieurs modes sont disponibles:

    - OneWay qui consiste à mettre à jour automatiquement les données de la de la source de données vers la cible.
    - OneTime qui est identique au OneWay sauf qu'il va faire la mise à jour uniquement à l'initialisation des contrôles.
    - OneWayToSource qui inversement au OneWay met les données du contrôle vers la source de données.
    - TowWay qui effectue la mise à jour des données de la source vers le contrôle et inversement.

    Attention que dans tout ceci votre source de donnée peux être un autre composant. Il est par exemple possible de lié via Binding 2 listbox, ou un Textbox sur une colonne d'une ListView, etc.

    Exemple d'utilisation pour une listbox :

    Code :
    1
    2
     
    <ListBox Name="listBox2" ItemsSource="{Binding ElementName=listBox1, Path=Items, Mode=OneWay}"/>
    Pour l'interface INotifyPropertyChanged, elle permet de notifier aux objets (contrôles ou autre) qui y sont abonnés qu'une valeur a changée.

    Un petit exemple tiré du MSDN :

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
     
    public class DemoCustomer : INotifyPropertyChanged
    { 
       private string customerNameValue = String.Empty; 
     
       public event PropertyChangedEventHandler PropertyChanged;
     
       // Méthode appelée par l'accesseur Set pour chaque propriété. 
       private void NotifyPropertyChanged([CallerMemberName] String propertyName = "")
       {
          if (PropertyChanged != null)
          {
             PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
          }
       }
     
       public string CustomerName
       {
          get
          {
             return this.customerNameValue;
          }
     
          set
          {
             if (value != this.customerNameValue)
             {
                this.customerNameValue = value;
                // Appel de la fonction pour notifier la modification. 
                NotifyPropertyChanged();
             }
          }
       }
    }
    Articles sur les technologies .NET

    Une réponse vous a aidé ? utilisez le bouton

    Votre problème est résolu ? utilisez le bouton

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •