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 :

[WPF] Comment définir une source de donnée DataSet à un DataGrid


Sujet :

Windows Presentation Foundation

  1. #1
    Membre habitué
    Inscrit en
    Mai 2006
    Messages
    397
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 397
    Points : 130
    Points
    130
    Par défaut [WPF] Comment définir une source de donnée DataSet à un DataGrid
    Bonjour,

    Afin de pouvoir visualiser les données que j'ai traité de ma base de donnée, j'aimerais les affichers dans mon datagrid.

    Pour cela, c'est utilisé un dataset dans lequel j'ai effectué la manipulation de mes données.

    Le seul soucis, c'est que quand je fais:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    myDataGrid.DataContext = myDataSet;
    OU

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    myDataGrid.Items = myDataSet;
    Ca ne marche pas. Impossible également de trouver une manière de faire marcher la chose avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    myDataGrid.ItemsSource = myDataSet
    Quelqu'un saurait-il la petite subtilité pour faire afficher les données?

    Merci d'avance et bonne journée,

    L.

  2. #2
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut
    Tu as essayé:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    myDataGrid.Items = myDataSet.Tables[0];

  3. #3
    Membre habitué
    Inscrit en
    Mai 2006
    Messages
    397
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 397
    Points : 130
    Points
    130
    Par défaut
    Je viens d'essayer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    dgResultCommonFields.Items.Add(result.getResult().Tables[0].);
    dgResultCommonFields.Visibility = Visibility.Visible;
    Mais rien ne s'affiche : /

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    En mettant la DataTable comme ItemsSource ça marche tout seul...

    Par exemple, si le DataSet est le DataContext :

    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    <DataGrid ItemsSource="{Binding LaTable}" />

  5. #5
    Membre habitué
    Inscrit en
    Mai 2006
    Messages
    397
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 397
    Points : 130
    Points
    130
    Par défaut
    Le seul soucis que j'ai c'est que j'ai un DataSet qui a plusieurs tables (qui elles contiennent une colonne chacune).

    La deuxième chose c'est aussi que c'est depuis le code que je veux faire ça.

    Le code exacte de la chose est:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    dgResultCommonFields.ItemsSource = result.getResult().Tables[0]
    Mais la il me dit qu'il peut pas convertir un type DataTable vers un type IEnumerable.

    Sacré problème, 2 jours déjà que je bloque dessus :s

  6. #6
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434

  7. #7
    Membre habitué
    Inscrit en
    Mai 2006
    Messages
    397
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 397
    Points : 130
    Points
    130
    Par défaut
    J'ai regardé vite fais, faut que je check plus en détail demain. J'espère que le même principe s'applique (ce qui devrait être le cas) ^^

  8. #8
    Membre habitué
    Inscrit en
    Mai 2006
    Messages
    397
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 397
    Points : 130
    Points
    130
    Par défaut
    J'ai regardé le détail de l'explication, mais je n'arrive pas à avoir les mêmes tag que dans l'article. Par exemple le tag <DataTemplate> n'est pas disponible chez moi.

    Il n'y a pas une solution pour faire ça directement depuis le code?

  9. #9
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut
    DataTemplate est un standard de WPF, tu devrais donc l'avoir si tu es placé au bon endroit. Montre nous ton code

  10. #10
    Membre habitué
    Inscrit en
    Mai 2006
    Messages
    397
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 397
    Points : 130
    Points
    130
    Par défaut
    Citation Envoyé par Thomas Lebrun Voir le message
    DataTemplate est un standard de WPF, tu devrais donc l'avoir si tu es placé au bon endroit. Montre nous ton code
    Le voici (en rouge l'endroit ou je voudrais mettre le DataTemplate) :

    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
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    <Window x:Class="ProfessionalTools.MainContentWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="Professionnal Tools" Height="708" Width="1195">
        <TabControl>
            <TabItem Header="Field Finder" Name="tbItemFieldFinder">
                <Grid Name="grdFieldFinder">
                    <Menu VerticalAlignment="Top">
                        <MenuItem Name="menuFFExit" Header="Exit" Click="onFFMenuExit_Click" />
                        <MenuItem Name="menuFFHelp" Header="Help">
                            <MenuItem Name="menuFFDsplyHelp" Header="Help"/>
                            <MenuItem Name="menuFFAboutUs" Header="About us"/>
                        </MenuItem>
                    </Menu>
                    <ListBox HorizontalAlignment="Left" Margin="12,95,0,60" Name="lstBxTables" Width="204" SelectionMode="Extended" />
                    <Button Height="34" HorizontalAlignment="Left" Margin="12,0,0,12" Name="btnGetCommonFields" VerticalAlignment="Bottom" Width="204" Click="btnGetCommonFields_Click">Get common fields</Button>
                    <TextBlock Height="51" HorizontalAlignment="Left" Margin="12,38,0,0" Name="lblDesc" VerticalAlignment="Top" Width="204" FlowDirection="LeftToRight" TextWrapping="Wrap">
                        Select table in which you wish to find common fields (press ctrl + left click for multi selection)
                    </TextBlock>
                    <Button Height="34" HorizontalAlignment="Right" Margin="0,0,6,12" Name="btnExportToExcel" VerticalAlignment="Bottom" Width="112">Export to excel</Button>
                    <Button Height="34" HorizontalAlignment="Left" Margin="918,0,0,12" Name="btnCreateSqlQuery" VerticalAlignment="Bottom" Width="112">Create SQL Query</Button>
                    <Label Height="28" HorizontalAlignment="Left" Margin="239,61,0,0" Name="label1" VerticalAlignment="Top" Width="120">Filter by colomn:</Label>
                    <ComboBox Height="23" HorizontalAlignment="Left" Margin="338,65,0,0" Name="comboBox1" VerticalAlignment="Top" Width="184" />
                    <Label Height="28" Margin="0,61,450,0" Name="label2" VerticalAlignment="Top" HorizontalAlignment="Right" Width="89">Filter by field:</Label>
                    <ComboBox Height="23" HorizontalAlignment="Right" Margin="0,66,260,0" Name="comboBox2" VerticalAlignment="Top" Width="196" />
                    //ici
                    <my:DataGrid AutoGenerateColumns="False" Margin="222,95,6,60" Name="dgResultCommonFields" xmlns:my="http://schemas.microsoft.com/wpf/2008/toolkit"/>
                </Grid>
            </TabItem>
            <TabItem Header="Time Manager" Name="tbItemTimeManager">
                <Grid Height="Auto" Name="grdTimeManager" Width="Auto" HorizontalAlignment="Stretch">
                    <Menu VerticalAlignment="Top">
                        <MenuItem Name="menuTMExit" Header="Exit" Click="onFFMenuExit_Click" />
                        <MenuItem Name="menuTMHelp" Header="Help">
                            <MenuItem Name="menuTMDsplyHelp" Header="Help"/>
                            <MenuItem Name="menuTMAboutUs" Header="About us"/>
                        </MenuItem>
                    </Menu>
                    <Button Height="31" HorizontalAlignment="Left" Margin="6,43,0,0" Name="btnManageClientWBS2" VerticalAlignment="Top" Width="216" Click="btnManageClientWBS2_Click">Manage Clients/WBS2 Code</Button>
                    <Button Height="31" HorizontalAlignment="Left" Margin="6,90,0,0" Name="btnEnterTime" VerticalAlignment="Top" Width="216">Enter time</Button>
                    <Button Height="31" HorizontalAlignment="Left" Margin="6,137,0,0" Name="btnReport" VerticalAlignment="Top" Width="216">Report</Button>
                    <Expander Header="Quick Access" Height="67" HorizontalAlignment="Left" Margin="247,43,0,0" Name="expander1" VerticalAlignment="Top" Width="150" BorderBrush="Transparent" BorderThickness="1">
                        <Grid>
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="22*" />
                                <ColumnDefinition Width="126*" />
                            </Grid.ColumnDefinitions>
                            <Button Height="23" Margin="0,6,51,0" Name="btnAddClient" VerticalAlignment="Top" Grid.Column="1" Click="btnAddClient_Click">Add a client</Button>
                        </Grid>
                    </Expander>
                </Grid>
            </TabItem>
        </TabControl>
    </Window>
    Voilà voilà ^^

    Bonnes fêtes

  11. #11
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut
    Tu veux qu'il s'affiche pour chacun des éléments de ta comboxbox ? Pour cela, il faut que tu définisse un DataTemplate, dans les ressources (un DT va toujours dans les ressources) et ensuite, tu affectes l'ItemTemplate de ta Combo

  12. #12
    Membre habitué
    Inscrit en
    Mai 2006
    Messages
    397
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 397
    Points : 130
    Points
    130
    Par défaut
    Non en faite je voudrais afficher les valeurs de retour de ma procédure dans le datagrid

    C'est cette partie là qui me bloque. Le datagrid ne prend pas directement un dataset pour afficher les données. Et je n'ai aucune idée comment il faut procéder, je voulais essayer cette solution avec le datatemplate, mais je n'arrive pas non plus a y avoir accès :/

  13. #13
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par Leelith Voir le message
    Le datagrid ne prend pas directement un dataset
    Non, il prend une DataTable : mets le DataSet en DataContext, et binde la propriété ItemsSource sur la table (ItemsSource="{Binding NomDeLaTable}")

  14. #14
    Membre habitué
    Inscrit en
    Mai 2006
    Messages
    397
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 397
    Points : 130
    Points
    130
    Par défaut
    Dans mon cas, mon dataset à plusieurs tables, du coup ce n'est pas possible de binder depuis le code XAML avec une boucle toutes les tables pour qu'elles soient afficher dans mon datagrid non?

  15. #15
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Ben tu peux afficher qu'une seule table à la fois... si tu veux tout afficher, mets toutes les données dans la même table

  16. #16
    Membre habitué
    Inscrit en
    Mai 2006
    Messages
    397
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 397
    Points : 130
    Points
    130
    Par défaut
    J'ai commencé à convertir mon dataset vers un datatable. Pour ça, j'ai fais la petite fonction suivante:

    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
     
    public void convertToDataTable()
            {
                result = new DataTable(); 
     
                for (int table = 0; table < tmpResult.Tables.Count - 1; table++)
                {
     
                    result.Columns.Add(tmpResult.Tables[table].TableName);
                    for (int field = 0; field < tmpResult.Tables[table].Rows.Count - 1; field++)
                    {
                        result.Rows.Add(tmpResult.Tables[table].Copy().Rows[field]);
                    }
                }
            }
    Le seul problème c'est qu'au moment ou je rajoute la ligne, il me dit qu'elle appartient déjà à une autre table. J'ai essayé aussi le coup du .Copy(), mais rien n'y change.

    Est-ce qu'il y a une méthode particulière pour transformer un dataset en datatable?

  17. #17
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par Leelith Voir le message
    Est-ce qu'il y a une méthode particulière pour transformer un dataset en datatable?
    Mais il n'y a rien à transformer, tu as déjà une DataTable... Elle est contenue dans le DataSet, et accessible via leDataSet.Tables["NomDeLaTable"]

  18. #18
    Membre habitué
    Inscrit en
    Mai 2006
    Messages
    397
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 397
    Points : 130
    Points
    130
    Par défaut
    Dans mon dataset, j'ai en faite 3 datatable que j'ai définis avec des noms différent, du coup si je veux afficher tout les resultats, je suis obligé de les mettres dans un seul datatable non? Sinon, je ne verais qu'une seule table et non toutes les tables (du moins c'est ce que j'ai compris)

  19. #19
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Mais tu veux faire quoi au juste ? quelle est la structure des tes tables ? elles ont les mêmes colonnes ? le même nombre de lignes ? elles ont des relations entre elles ? Le dernier bout de code que tu as posté est pas très clair pour moi... et d'ailleurs à mon avis il est foireux : tu fais des copies de table dans des boucles imbriquées, c'est un peu violent

  20. #20
    Membre habitué
    Inscrit en
    Mai 2006
    Messages
    397
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 397
    Points : 130
    Points
    130
    Par défaut
    en faite ce que j'ai à faire est relativement simple: je dois lister les champs commun de chaque table que l'on passe au programme via un fichier Excel.

    Pour cela, je fais une boucle qui va m'affecter dans un dataset chaque table, et les champs commun qui sont dans les autres tables. C'est pour cette raison que dans mon dataset, j'ai plusieurs tables qui contiennent des données différentes.

    Pour mettre tout ça dans une datatable, j'ai voulus mettre le nom des colonnes avec le nom des tables de mon dataset, puis ensuite insérer les lignes de la table du dataset vers la colonne correspondante. Et ça je n'y arrive pas là

    Voilà voilà ^^

Discussions similaires

  1. Réponses: 11
    Dernier message: 04/09/2010, 13h29
  2. Comment définir une base de données de cotations boursières?
    Par Pierre8r dans le forum Général Java
    Réponses: 1
    Dernier message: 12/01/2010, 15h52
  3. Réponses: 5
    Dernier message: 08/07/2008, 16h55
  4. Définir une source de données Access
    Par SLCRMYN dans le forum Access
    Réponses: 2
    Dernier message: 27/11/2006, 16h57
  5. Définir une source de données
    Par vdbadr dans le forum Access
    Réponses: 11
    Dernier message: 01/01/2006, 10h37

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