IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Presentation Foundation Discussion :

ajout de nouvelle lignes dans une DATAGRID


Sujet :

Windows Presentation Foundation

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 43
    Points : 35
    Points
    35
    Par défaut ajout de nouvelle lignes dans une DATAGRID
    Bonjour,
    Je viens d'entamer les WPF et j'ai un peu du mal
    Mon but d'aprés avoir ajouté des colonnes à ma datagrid est de pouvoir remplir chaque colonne par une liste des valeurs d'une façon indépendante:
    Voila mes bouts de code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
     
    public partial class Window2 : Window
        {
           public  List<String> list { get; set; }      
            public Window2()
            {
                InitializeComponent();
                addColumns();
                addRows();    
            }
            public void addColumns()
            {
                DataGridTextColumn dc1 = new DataGridTextColumn();
                DataGridTextColumn dc2 = new DataGridTextColumn();
                dc1.Header = "Nom";
                dc1.SortMemberPath = "Nom";
                dataGrid1.Columns.Add(dc1);
                dc2.Header = "Prenom";
                dc2.SortMemberPath = "Prenom";
                dataGrid1.Columns.Add(dc2);
             }
            public List<String> getName()
            {
                list = new List<string>();
                String a = "lady";         
                for (int i = 0; i < 3; i++)
                {
                    list.Add(a);
                }
                return list;
            }
     
            public void addRows()
            {
                foreach (var column in dataGrid1.Columns)
                {
                    if ("Nom".Equals(column.SortMemberPath))
                    {
     
                        dataGrid1.DataContext = getName();
                    }
                }
            }
        }
    mon code XAML
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    <Window x:Class="testlogin.Window2"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
        xmlns:dg = "http://schemas.microsoft.com/wpf/2008/toolkit"   
        Title = "DataGrid Example" Height = "300" Width = "300" >
     
        <dg:DataGrid Height="148" HorizontalAlignment="Left" Margin="12,21,0,0" Name="dataGrid1" VerticalAlignment="Top" Width="225" ItemsSource="{Binding }">
            <dg:DataGrid.Columns>
     
            </dg:DataGrid.Columns>
     
        </dg:DataGrid>
    </Window >
    Le problème c'est deja d'une part ça me crée une nouvelle colonne Length que j'ai pas crée qui contient la taille des noms.
    Ce que je veux c'est de pouvoir afficher la liste des noms dans ma colonne Nom
    SVP si qlq à une idée ?
    Merci

  2. #2
    Membre expert
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 210
    Points : 3 015
    Points
    3 015
    Par défaut
    Salut,

    Citation Envoyé par yayasam
    Le problème c'est deja d'une part ça me crée une nouvelle colonne Length que j'ai pas crée qui contient la taille des noms.
    Il faut utiliser la propriété AutoGenerateColumns pour gérer la création des colonnes :
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        <dg:DataGrid AutoGenerateColumns="False" Height="148" HorizontalAlignment="Left" Margin="12,21,0,0" Name="dataGrid1" VerticalAlignment="Top" Width="225" ItemsSource="{Binding }">
            <dg:DataGrid.Columns>
     
            </dg:DataGrid.Columns>
     
        </dg:DataGrid>

    Citation Envoyé par yayasam
    Ce que je veux c'est de pouvoir afficher la liste des noms dans ma colonne Nom
    Utilise la propriété Binding de tes DataGridTextColumn pour dire sur quel champs tu veux travailler.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 43
    Points : 35
    Points
    35
    Par défaut
    tout d'abord merci bcp pr l'aide
    pour ne pas céer des colonnes automatiquement je l'avais trouvé (merci bcp comme meme)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    AutoGenerateColumns= "False"
    mais le Binding je vois pas du tt comment l'utiliser
    etant donnée que mon but et de pouvoir faire le binding d'une façon dynamique(avec une fonction générale pr l'ensemble de mes colonnes et pas ds le fichier XAML) autrement dit je veux pouvoir avec une méthode c# afficher dans ma colonne Non une liste des Noms et dans ma colonne Prénom une liste des prénoms ( apartir d'une collection je veux faire le binding entre chaque colonne et une liste des valeurs de la collection)
    j'ai fais ça et je ss bloquée
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
       dc.Binding = new Binding();
    je trouve pas de DisplayMemberPAth , je sais pas cmt faire
    si t'as une idée ça sera trés gentil

  4. #4
    Membre expert
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 210
    Points : 3 015
    Points
    3 015
    Par défaut
    Tu peux trouver des exemples sur ce forum ou sur le net pour la mise ne place de Binding.

    Mais je pense à quelque chose de plus court en fait :

    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    dc1.DisplayMemberBinding = new System.Windows.Data.Binding("Nom");
    dc2.DisplayMemberBinding = new System.Windows.Data.Binding("Prenom");

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 43
    Points : 35
    Points
    35
    Par défaut
    sur le net je trouve que du binding avec XAml et pas en code
    sinon mon gros problème j'ai pas " DisplayMemberBinding"
    Erreur 16 'Microsoft.Windows.Controls.DataGridTextColumn' ne contient pas une définition pour 'DisplayMemberBinding' et aucune méthode d'extension 'DisplayMemberBinding' acceptant un premier argument de type 'Microsoft.Windows.Controls.DataGridTextColumn' n'a été trouvée (une directive using ou une référence d'assembly est-elle manquante*?) C:\projetT2\T2-AutoCAD-Simple\DCTMConnector\DCTMConnector\ActionsDCTM\Browser\DCTMBrowserByWS.xaml.cs 270 20 DCTMConnector
    jai pas non plus DiplayMemberPath
    et je suis bien coincée

  6. #6
    Membre expert
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 210
    Points : 3 015
    Points
    3 015
    Par défaut
    C'est vendredi et je me mélange les pinceaux
    Ce que je te dis est vrai avec Silverlight en fait et pas avec WPF...

    Donc pour le binding, essaie quelque chose comme ça :
    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    dc1.Binding = new Binding("Nom");
    dc2.Binding = new Binding("Prenom");

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 43
    Points : 35
    Points
    35
    Par défaut
    merci bcp rp tes réponses assez rapides
    je vais l'essayer espérant que ça mettre fin a mon problème

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 43
    Points : 35
    Points
    35
    Par défaut
    ça marche pas et j'ai limpression que je zappe qlq chose
    deja ma premiére question est ce que je devrais tjr gardé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     dataGrid1.DataContext = getName();
    étant donnée que je retourne une liste des Nom getName()
    ce que je devrais passer en parametre du binding represente le nom de la colonne ou le nom de l'atribbut dont je veux afficher sa valeur ( getName)

  9. #9
    Membre expert
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 210
    Points : 3 015
    Points
    3 015
    Par défaut
    Oui tu as raison, il faut changer ça. La fonction AddRows est à enlever.

    Le DataContext du DataGrid va directement prendre la collection de personne.

    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ObservableCollection<Personne> obs = new ObservableCollection<Personne>();
    // tu remplis 'obs' avec :
    obs.Add(new Personne("nom1", "prenom1"));
    obs.Add(new Personne("nom2", "prenom2"));

    où Personne est un objet du type :

    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public class Personne{
      public string Nom { get; set; }
      public string Prenom { get; set; }
     
      public Personne(string nom, string prenom){
        this.Nom = nom;
        this.Prenom = prenom;
      }
    }

    Le binding mis en place va se charger du reste.
    Désolé pour ma lecture en diagonale du vendredi et en espérant que je ne zappe pas encore quelque chose

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 43
    Points : 35
    Points
    35
    Par défaut
    c'est moi qui te remercie pour ton soutien et ton aide

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 43
    Points : 35
    Points
    35
    Par défaut
    j'ai juste une dérniére question est ce qu'on devrait pas faire
    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    datagrid.DataContext = obs;

    pske je vois pas le lien entre la collection et le datagrid

  12. #12
    Membre expert
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 210
    Points : 3 015
    Points
    3 015
    Par défaut
    Citation Envoyé par yayasam Voir le message
    j'ai juste une dérniére question est ce qu'on devrait pas faire
    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    datagrid.DataContext = obs;

    pske je vois pas le lien entre la collection et le datagrid
    Oui c'est ce que je voulais dire par :
    Citation Envoyé par binoo
    Le DataContext du DataGrid va directement prendre la collection de personne.

  13. #13
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 43
    Points : 35
    Points
    35
    Par défaut
    oui oui j'ai essyé ça et ça marche
    merci bcccccccccccccccccp
    mais j'ai tjrs un souci c'est que je par rapport a mon projet je devrais obligatoirement remplir les colonnes de ma datgrid dans une fonction apart
    pske mes colonnes je les ajoutes d'une façon dynamique
    ce que jai fait c'est que j'ai fait ma méthode addcolumns qui me crée un certain nombre de colonne et qui me retourne la liste des colonnes:
    je récupére cette liste de colonne dans ma méthode addRow ou je fais le binding
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
     public List<DataGridTextColumn> addColumns()
            {
                List<DataGridTextColumn> lcol = new List<DataGridTextColumn>();
                foreach (var column in Malist.columns)
                {               
                    // create a new colmn               
                    DataGridTextColumn dc = new DataGridTextColumn();
                     // set values of columns
                    dc.Header = column.columnLabel;
                    dc.SortMemberPath = column.attributeName;
                    dc.IsReadOnly = true;
                    dc.Width = calculWidth(column.columnWidth);                
                   _log.Debug("dc.SortMemberPath = " + dc.SortMemberPath);
                    _log.Debug("with of column = " + column.columnWidth);
                    _log.Debug("Calculeted with  = " + dc.Width);
                    _log.Debug("with of datagrid = " + dataGrid.Width);
     
                    // add columns into DataGrid
     
                    dataGrid.Columns.Add(dc);
                    lcol.Add(dc);
                  }
                return lcol;
            }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    public void addRows(ObservableCollection<Presonne> list)
            {
                List<DataGridTextColumn> lcol = addColumns();
                DataGridTextColumn current = new DataGridTextColumn(); 
                //foreach (t2Column column in  browser.columns)
                 foreach (var item in lcol)
                 {
                    if ("Nom".Equals(item.SortMemberPath))
                    {
                         item.Binding = new Binding("Nom");//l'attribut de la classe personne
                        dataGrid.DataContext = list;
                        break;                            
                    }
                    break;
     
                   }
     
                }
    et dans mon constructeur j'appelle addRow et je lui passe en parametre une collection de Personne, le binding passe trés bien mais un peu en trop
    pske ça me dépulique les colonnes que j'ai

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 15/05/2012, 09h31
  2. Ajout de ligne dans une datagrid ou gridview
    Par thierry007 dans le forum ASP.NET
    Réponses: 5
    Dernier message: 16/11/2007, 09h23
  3. Réponses: 5
    Dernier message: 07/08/2007, 10h10
  4. Réponses: 2
    Dernier message: 06/02/2007, 09h17
  5. Ajouter des nouvelles données dans une table
    Par Lingo dans le forum Access
    Réponses: 7
    Dernier message: 27/10/2006, 13h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo