none
DataGrid RRS feed

  • Question

  • Slt

    J'ai un soucis et je n'arrive pas à trouver la solution.

    Il me manque une directive using pour DataSource. J'ai regarder pendant des heures et je ne trouve pas la solution. Voila le code :

    dataGridView1.DataSource = ds.Tables[0];
    

    Le data source n'est pas pris en charge. Quel directive dois je mettre pour ce code.

    Merci

    jeudi 26 juillet 2012 14:57

Réponses

Toutes les réponses

  • using System.Data; ? Le problème ne concerne pas le DataSet plutôt que le DataSource ? (qui n'est que le nom de la propriété et donc ne devrait pas entrer en ligne de compte).

    De préférence, toujours poster le message d'erreur exact et la ligne sur laquel il survient (à brûle pourpoint je dirais que si c'était un problème de directive using cela devrait concerner une déclaration et non pas une ligne de code sans aucune déclaration) ce qui permet d'éviter toute déformation du prolbème dans sa description et dans la compréhension que les autres personnes ont de votre description...


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".



    jeudi 26 juillet 2012 15:50
  • bonjour,

    voici le message d'erreur :

    Erreur 1 'System.Windows.Controls.DataGrid' ne contient pas une définition pour 'DataSource' et aucune méthode d'extension 'DataSource' acceptant un premier argument de type 'System.Windows.Controls.DataGrid' n'a été trouvée (une directive using ou une référence d'assembly est-elle manquante ?) C:\Users\Sector4\documents\visual studio 2010\Projects\Gestiopa_Gestions\Gestiopa_Gestions\Fenetres\ListMobs.xaml.cs 59 28 Gestiopa_Gestions

    et voici le code

    try
                {
                    XmlReader xmlFile;
                    xmlFile = XmlReader.Create("http://entropialife.com/webservices/appservice.asmx/getMobs?appID=**&appKey=**********", new XmlReaderSettings());
                    DataSet ds = new DataSet();
                    ds.ReadXml(xmlFile);
                    myDataGrid.DataSource = ds.Tables[0];
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.ToString());
                }

    jeudi 26 juillet 2012 18:48
  • Bonjour,

    Il semblerait que vous utilisez le contrôle DataGrid de WPF et non le DataGridView de Windows Forms. La propriété DataSource n'existe que sur le DataGridView de Windows Forms.

    Pour affecter une source de données à votre DataGrid WPF utilisez la propriété SourceItems : http://msdn.microsoft.com/fr-fr/library/system.windows.controls.itemscontrol.itemssource.aspx

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte logiciel/Consultant/Formateur Freelance
    Blog : http://gilles.tourreau.fr
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5/4.0
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5/4.0

    • Proposé comme réponse Patrice ScribeMVP vendredi 27 juillet 2012 09:28
    • Marqué comme réponse Sector4 vendredi 27 juillet 2012 12:36
    vendredi 27 juillet 2012 07:01
    Modérateur
  • Bonjour et merci de votre réponse.

    Avez vous des exemples concernant les datagrid et XML,car j'en ai plein mais ne fonctionne pas.

    Merci

    vendredi 27 juillet 2012 09:35
  • Encore une fois je suggère d'indiquer précisemment le problème. Si vous avez déjà plein d'exemples qui ne marchent pas, je ne vois pas pourquoi d'autres exemples marcheraient davantage. Vous retombez peut-être sur une difficulté particulière lié à votre situation.

    Ah. Je vois que vous lisez un fichier XML pour lire le contenu d'un DataSet. Etes-vous sûr que c'est bien ce que retourne la page que vous appelez ?

    Il s'agit d'un service web asmx et cela retourne plutôt un document xml qui représente la réponse à un appel de fonction SOAP plutôt qu'un dataset.

    Un service asmx s'utilise plutôt de la façon suivante qu'en consommant directement le fichier XML retourné : http://msdn.microsoft.com/fr-fr/library/bb628649.aspx

    En gros le service renvoie une description des fonctions et cette manip permet de générer des classes qui vont automatiquement exposer ces fonctions à votre application cliente (en s'occupant de générer/consommer les fichiers XML que vous n'aurez jamais à voir vous-même).

    A tout hasard j'ai fait un essai et cela semble ok chez moi ? Essayez de commencer par une application console comme :

        static void Main(string[] args)
            {
                var str = "<?xml version=\"1.0\" encoding=\"utf-8\"?>"
                        + "<ArrayOfCreature xmlns=\"ETWS\">"
                        + "<Creature>"
                        + "<mobName>A</mobName>"
                        + "<mobID>2</mobID>"
                        + "</Creature>"
                        + "<Creature>"
                        + "<mobName>B</mobName>"
                        + "<mobID>3</mobID>"
                        + "</Creature>"
                        + "</ArrayOfCreature>";
                System.IO.TextReader t = new System.IO.StringReader(str);
                DataSet ds = new DataSet();
                ds.ReadXml(t);
                foreach (DataRow r in ds.Tables[0].Rows)
                {
                    Console.WriteLine("--");
                    foreach (DataColumn c in ds.Tables["Creature"].Columns)
                        Console.WriteLine(c.ColumnName + "=" + r[c].ToString());
                }
                t.Dispose();
                Console.ReadLine();
            }

    Avez vous essayé de voir si le fichier XML retourné semble conforme à l'exemple "en dur" ci-dessus ? Si vous utilisez l'approche service web la fonction getMobs vous retournera directement un tableau de créatures...


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".




    lundi 30 juillet 2012 17:21
  • Bonjour patrice,

    en fait j'ai reussi. J'arrive a mettre le XML et le sql dans mon dataGrid.

    Je ne vais pas poster le code car il est extremement long vu que j'effectue des operation dessus.

    Mais je te remerci Patrice pour ton attention.

    Cordialement.;)

    lundi 30 juillet 2012 21:03
  • Pas de souci. Ce qu'il est parfois intéressant de poster c'est surtout la façon dont l'erreur a été résolue ce qui permet à qq d'autre qui aurait le même problème d'avoir une piste pour la résolution (d'où l'intérêt aussi de préciser au départ l'erreur exacte qui est rencontrée pour que qq puisse chercher plus facilement dans les forums). A+


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".

    mardi 31 juillet 2012 08:50
  • C'est vrai Patrice, j'en prend note.

    Donc pour afficher un xml dans un datagrid en wpf j'utilise le code suivant :

    XmlDocument doc = new XmlDocument();
    
             /////////Chemin du fichier XML distant  
                doc.Load("http://entropialife.com/webservices/appservice.asmx/getMobGlobals?appID=*****&appKey=************&mobID=85&startUnix=1341072558&endUnix=1343664558");
                // Recherches des noeud dans le fichier XML.
                XmlElement root = doc.DocumentElement;
                XmlNodeList elemList = root.GetElementsByTagName("mobName");
                XmlNodeList IDList = root.GetElementsByTagName("mobID");
                XmlNodeList MobMaturity = root.GetElementsByTagName("mobMaturity");
                XmlNodeList GlobalValue = root.GetElementsByTagName("globalValue");
                XmlNodeList UnixTime = root.GetElementsByTagName("unixTime");
                XmlNodeList LANDareaName = root.GetElementsByTagName("LandareaName");
                XmlNodeList GlobalType = root.GetElementsByTagName("globalType");
                XmlNodeList GlobalTime = root.GetElementsByTagName("globalTime");
                int H48 = Convert.ToInt32(heure48);
                int HeureFin = Convert.ToInt32(UNIXEnd);
    
    ///Création de la boucle pour lister la totalitée du contenu
                for (int i = 0; i < elemList.Count; i++)
                {
    
                    dataGrid1.Items.Add(new Mobs
                    {
                        Name = elemList[i].InnerText,
                        ID = IDList[i].InnerText,
                        mobMaturity = MobMaturity[i].InnerText,
                        globalValue = GlobalValue[i].InnerText,
                        unixTime = UnixTime[i].InnerText,
                        LandareaName = LANDareaName[i].InnerText,
                        globalTime = GlobalTime[i].InnerText,
                        globalType = GlobalType[i].InnerText
                    });
    
                }
    /// affichage dans le datagrid
                dataGrid1.Columns.Add(new DataGridTextColumn { Header = "Nom Mobs", Binding = new Binding("Name") });
                dataGrid1.Columns.Add(new DataGridTextColumn { Header = "ID Mobs", Binding = new Binding("ID") });
                dataGrid1.Columns.Add(new DataGridTextColumn { Header = "Maturitée", Binding = new System.Windows.Data.Binding("mobMaturity") });
                dataGrid1.Columns.Add(new DataGridTextColumn { Header = "Temps UNIX", Binding = new System.Windows.Data.Binding("unixTime") });
                dataGrid1.Columns.Add(new DataGridTextColumn { Header = "Date et Heure UTC", Binding = new System.Windows.Data.Binding("globalTime") });
                dataGrid1.Columns.Add(new DataGridTextColumn { Header = "Valeur Global", Binding = new System.Windows.Data.Binding("globalValue") });
                dataGrid1.Columns.Add(new DataGridTextColumn { Header = "Type du Global", Binding = new System.Windows.Data.Binding("globalType") });
                dataGrid1.Columns.Add(new DataGridTextColumn { Header = "Land", Binding = new System.Windows.Data.Binding("LandareaName") });

    et le datagrid dans le fichier XAML (Ne pas oublier de mettre la fonction BINDING

    <DataGrid AutoGenerateColumns="False" Height="440" HorizontalAlignment="Left" Margin="12,283,0,0" Name="dataGrid1" VerticalAlignment="Top" Width="973" ItemsSource="{Binding}"/>

    Voila si ca peut aider. ;)
    mardi 31 juillet 2012 11:46