Précédent   Forum du club des développeurs et IT Pro > Dotnet > Développement Windows > Windows Presentation Foundation
Windows Presentation Foundation Forum d'entraide sur le développement d'applications Windows avec Windows Presentation Foundation
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 26/01/2013, 20h39   #1
Johnny P.
Membre du Club
 
Inscription : février 2006
Messages : 201
Détails du profil
Informations forums :
Inscription : février 2006
Messages : 201
Points : 62
Points : 62
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.
Johnny P. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/01/2013, 21h17   #2
infosam76
Membre Expert
 
Homme Eric Metz
Développeur informatique
Inscription : avril 2006
Messages : 573
Détails du profil
Informations personnelles :
Nom : Homme Eric Metz
Âge : 36
Localisation : Belgique

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

Informations forums :
Inscription : avril 2006
Messages : 573
Points : 1 723
Points : 1 723
Bonjour,

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

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

Votre problème est résolu ? utiliser le bouton
infosam76 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 31/01/2013, 19h23   #3
Johnny P.
Membre du Club
 
Inscription : février 2006
Messages : 201
Détails du profil
Informations forums :
Inscription : février 2006
Messages : 201
Points : 62
Points : 62
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
Johnny P. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/02/2013, 10h39   #4
micka132
Membre Expert
 
Homme Mickael
Développeur .NET
Inscription : novembre 2009
Messages : 729
Détails du profil
Informations personnelles :
Nom : Homme Mickael
Âge : 24
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Développeur .NET

Informations forums :
Inscription : novembre 2009
Messages : 729
Points : 1 241
Points : 1 241
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).
micka132 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/02/2013, 11h23   #5
Johnny P.
Membre du Club
 
Inscription : février 2006
Messages : 201
Détails du profil
Informations forums :
Inscription : février 2006
Messages : 201
Points : 62
Points : 62
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.
Johnny P. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/02/2013, 16h03   #6
micka132
Membre Expert
 
Homme Mickael
Développeur .NET
Inscription : novembre 2009
Messages : 729
Détails du profil
Informations personnelles :
Nom : Homme Mickael
Âge : 24
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Développeur .NET

Informations forums :
Inscription : novembre 2009
Messages : 729
Points : 1 241
Points : 1 241
Je ne comprends pas la question
Voici un article qui détail pas mal la datagrid:

http://www.codeproject.com/Articles/...tical-Examples
micka132 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/02/2013, 19h23   #7
Johnny P.
Membre du Club
 
Inscription : février 2006
Messages : 201
Détails du profil
Informations forums :
Inscription : février 2006
Messages : 201
Points : 62
Points : 62
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.
Johnny P. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/02/2013, 10h16   #8
micka132
Membre Expert
 
Homme Mickael
Développeur .NET
Inscription : novembre 2009
Messages : 729
Détails du profil
Informations personnelles :
Nom : Homme Mickael
Âge : 24
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Développeur .NET

Informations forums :
Inscription : novembre 2009
Messages : 729
Points : 1 241
Points : 1 241
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.
micka132 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 09/02/2013, 12h16   #9
Johnny P.
Membre du Club
 
Inscription : février 2006
Messages : 201
Détails du profil
Informations forums :
Inscription : février 2006
Messages : 201
Points : 62
Points : 62
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.

Citation:
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 ?
Johnny P. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2013, 15h34   #10
infosam76
Membre Expert
 
Homme Eric Metz
Développeur informatique
Inscription : avril 2006
Messages : 573
Détails du profil
Informations personnelles :
Nom : Homme Eric Metz
Âge : 36
Localisation : Belgique

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

Informations forums :
Inscription : avril 2006
Messages : 573
Points : 1 723
Points : 1 723
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é ? utiliser le bouton

Votre problème est résolu ? utiliser le bouton
infosam76 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 00h52.


 
 
 
 
Partenaires

Hébergement Web