none
gestion d'affichage de base de donnée xml

    Question

  • bonjour tout le monde

    j'ai un programme c# qui contient une datagridview qui lit son contenu d'une base de donnée xml

    <?xml version="1.0" encoding="utf-8"?>
    <Videos>
      <Video>
        <FICHIER></FICHIER>
        <TITRE></TITRE>
        <DATECREATION></DATECREATION>
        <HEUREDERNIERACCEES></HEUREDERNIERACCEES>
        <UTILISATEUR></UTILISATEUR>
        <COPIE></COPIE>
      </Video>
    </videos>

    L'utilusateur qui va rempli cette base de donnée en + il a le droit d'ajouter des elements
    ça veut dire ce n'est pas la base finale pour l'utlisateur car a tout moment il a le droit d'ajouter un element .
    Mon problème c'est que je veut que l'utlisateur gère son affichage aussi
    il peut afficher juste la colonne fichier selement ou deux colonne et on doit pris en compte qu'il va ajouter peut etre des element 
    ça se fait avec des checkbox? et comment on pris en compte les element ajouter? 

    et comment peut il aussi faire un affichage de tous les fichier ayanat le meme contenu?? ou les les afficher tous qui on meme utilisateur?

    Merci pour votre aide

    dimanche 25 novembre 2012 17:12

Réponses

Toutes les réponses

  • utilise DataTable

    Exemple : 
    
    DataTable1.ReadXml("Table.xml")
    
    DataTable1.WriteXml("Table.xml")
     
    

    et pour les checkbox la propriété columns de ta datagrid 

    dataGridView1.Columns[0].Visible = ! dataGridView1.Columns[0].Visible

    dimanche 25 novembre 2012 20:10
  • utilise DataTable

    Exemple : 
    
    DataTable1.ReadXml("Table.xml")
    
    DataTable1.WriteXml("Table.xml")
     

    et pour les checkbox la propriété columns de ta datagrid 

    dataGridView1.Columns[0].Visible = ! dataGridView1.Columns[0].Visible

    pour quoi le data table ?
    just je veut gerer l'affichage dans datagridview aves des chekbox qui sont dynamique c veut dire lors d'ajout d'un element il sera ajouter aussi comme bouton chekbox automatiquement

    Merci

    dimanche 25 novembre 2012 21:01
  • Salut j'ai pas compris ce que tu veux faire. j'ai fais un exemple suivant se que j'ai compris tu le voie et tu commente

    Exemple  



    • Modifié NesLinAye mardi 27 novembre 2012 08:16
    dimanche 25 novembre 2012 21:59
  • Salut j'ai pas compris ce que tu veux faire. j'ai fais un exemple suivant se que j'ai compris tu le voie et tu commente

    Exemple  

    bonjour

    c'est presque ça mais dans mon application l'utilusateur a le droit ajouter un champ3 par exemple !

    donc aprés avoir ajouter un champ3 par l'utilusateur il faut que un autre bouton chekbox sera visible pour permettre de choisir champ3 a l'affichage ou nn

    de plus je veur que l'utlisateur lorsque les champ son plein choisi un afffichage selon le contenu par exepmle champ1 àa comme contenu (a, a, b, a, c)

    donc l'utilusateur a le choix d'affcher selement lles ligne qui ont le contenu a de champ1
    Merci bien

    moi j'utilise un datagridview donc pas un datatable
    C'est possible de mettre les checkbox dans un autre form ??
    Merci encore pour m'aider

    • Modifié george_89 dimanche 25 novembre 2012 22:46
    dimanche 25 novembre 2012 22:33
  • Salut, pour l'ajout de colonne tu doit d'abord aménagé ton code de création.

    if (!System.IO.File.Exists("MaTable.xml"))
                {
                    MaTable.TableName = "MaTable";
                    DataColumn TT = MaTable.Columns.Add("Champ1", typeof(String));
                    TT.Caption = "Champ 1";
    
                    TT = MaTable.Columns.Add("Champ2", typeof(String));
                    TT.Caption = "Champ 2";
    
                    MaTable.WriteXmlSchema("MaTable.xml", true);
    la sauvegarde change, il faut sauvegardé les données + la structure de la table.
    MaTable.WriteXml("MaTable.xml",XmlWriteMode.WriteSchema);
    et le fameux ajout, tu ajoute un bouton + code
    MaTable.Columns.Add("Champ" + (MaTable.Columns.Count+1).ToString(), typeof(String));
    pour le filtre je ne sait pas comment le faire, il faudra creusé :).  
          

      
    lundi 26 novembre 2012 08:21
  • Bonjour,

    Cela confirme ma suggestion dans la discussion précédente. Le DataGridView est juste un contrôle qui permet d'afficher les données. Le DataTable est une classe qui peut-être utilisée comme source de données pour ce contrôle. Les deux ne sont pas du tout contradictoires mais complémentaires.

    Et donc il est possible d'ajouter des champs dans le datatable et de sauver les données dans un fichier XML. Cela sera plus simple que de persister à faire soi-même toutes les manips sur le fichier XML.

    Il est possible d'afficher ou pas une colonne en modifiant la liste des colonnes présentes dans le DataGridView.

    Pour le filtre voir par exemple http://msdn.microsoft.com/fr-fr/library/system.data.datatable.defaultview.aspx (et donc l'exemple modifie la propriété RowFilter pour filtrer les lignes actuellement affichées).


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


    lundi 26 novembre 2012 10:24
  • Pour le filtre voir par exemple http://msdn.microsoft.com/fr-fr/library/system.data.datatable.defaultview.aspx (et donc l'exemple modifie la propriété RowFilter pour filtrer les lignes actuellement affichées).


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


    Merci Patrice
    lundi 26 novembre 2012 12:30
  • Pour le filtre voir par exemple http://msdn.microsoft.com/fr-fr/library/system.data.datatable.defaultview.aspx (et donc l'exemple modifie la propriété RowFilter pour filtrer les lignes actuellement affichées).


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


    Merci Patrice
    comment on améliore votre exemple par ça ?? par l'idée que je t'ai deja dit : ça veut dire lorsque on fait le changement dans la base de donnée de ton exemple précedent comment ont peut recevoir les différente chekbox des element et les autres checkbox selon le contenu du champ1  qui seron mis dans un autre form??

    Merci 
    lundi 26 novembre 2012 15:22
  • Salut, j'ai mis à jour l'exemple voir d'abord :))).

    pour la liste de chekbox essai de creuser :)

    Pardon c'est corriger. 






    • Modifié NesLinAye mercredi 28 novembre 2012 09:14
    lundi 26 novembre 2012 15:37
  • Salut, j'ai mis à jour l'exemple voir d'abord :))).

    pour la liste de chekbox essai de creuser :)

    j'ai pas pu télecharger l'exemple ??? il m'affiche:

    Petit problème... Google Chrome n'est pas parvenu à trouver la page https.

    lundi 26 novembre 2012 16:03
  • Salut, j'ai mis à jour l'exemple voir d'abord :))).

    pour la liste de chekbox essai de creuser :)

    Pardon c'est corriger. 




    Merci pour la correction d'erreur :)
    lundi 26 novembre 2012 16:55
  • Salut, j'ai mis à jour l'exemple voir d'abord :))).

    pour la liste de chekbox essai de creuser :)

    Pardon c'est corriger. 




    Mon ami moi je peut l'ajout des colonne et merci
    mais le problème lorsque on ajout ces colonne comment on peut avoir des checkbox pour chaque ajout ??
    tu as compris le problème?
    lorsque j'ajoute beacoup de colonne alors je veut afficher juste champ1 et champ2 malgré j'ai 4 champ

    Mon problème que je veut lorsque il ya un champ ajouter donc automatiquement il ya un bouton checkbox ajouter automatiquement pour te donne le droit d'afficher ce champ ou nn

    Merci pour tes suggestion :)

    lundi 26 novembre 2012 17:07
  • Si le problème est d'afficher plusieurs checkbox, il serait possible d'utliser là encore une DataGridView qui comporterait une colonne case à cocher mais aussi peut-être un libellé et une longueur (pour que l'utilisateur puisse définir le titre et la longueur maxi saisisable, éventuellement le type de la donnée etc...).

    Cette DataGridView pourrait être basée sur une autre table qui mémorise les réglages et qui serait sauvée dans le même fichier XML.


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

    mardi 27 novembre 2012 14:57
  • Sur ce que j'ai compris j'ai fait un petit exemple:

    Ajoutez un checkedListBox :

    Pour le remplir vous utilisez :

        foreach (DataColumn dc in ds.Tables[0].Columns)

                {

                    checkedListBox1.Items.Add(dc.ColumnName, true);

                }

    ds c’est le DataSet  qui remplis le DataGrid.

    Maintenait vous avez la liste des colonnes visible.

    Pur l’évènement ItemCheck du checkedListBox ajoutez :

    private void checkedListBox1_ItemCheck(object sender, ItemCheckEventArgs e)

            {

             //   if (e.NewValue == CheckState.Checked)

               // {

                dataGridView1.Columns[checkedListBox1.Items [e.Index].ToString() ].Visible = (e.NewValue == CheckState.Checked);

             //   }

            }

    Cordialement, 


    Aurel BERA, Microsoft
    Microsoft propose ce service gratuitement, dans le but d'aider les utilisateurs et d'élargir les connaissances générales liées aux produits et technologies Microsoft. Ce contenu est fourni "tel quel" et il n'implique aucune responsabilité de la part de Microsoft.

    mardi 27 novembre 2012 14:58
  • Sur ce que j'ai compris j'ai fait un petit exemple:

    Ajoutez un checkedListBox :

    Pour le remplir vous utilisez :

        foreach (DataColumn dc in ds.Tables[0].Columns)

                {

                    checkedListBox1.Items.Add(dc.ColumnName, true);

                }

    ds c’est le DataSet  qui remplis le DataGrid.

    Maintenait vous avez la liste des colonnes visible.

    Pur l’évènement ItemCheck du checkedListBox ajoutez :

    private void checkedListBox1_ItemCheck(object sender, ItemCheckEventArgs e)

            {

             //   if (e.NewValue == CheckState.Checked)

               // {

                dataGridView1.Columns[checkedListBox1.Items [e.Index].ToString() ].Visible = (e.NewValue == CheckState.Checked);

             //   }

            }

    Cordialement, 


    Aurel BERA, Microsoft
    Microsoft propose ce service gratuitement, dans le but d'aider les utilisateurs et d'élargir les connaissances générales liées aux produits et technologies Microsoft. Ce contenu est fourni "tel quel" et il n'implique aucune responsabilité de la part de Microsoft.

    bonjour aurel
    je t'explique le problème

    moi j'ai une datagridview qui fait l'affichage d'une base de donnée xml
    L'utlisateur de l'application a le choix d'ajouter des element dans la base xml ça veut dire le developpeur aprés developpez son application il ne sait pas combient d'element sera dans la base .
    donc l'utilisateur de l'application on lui donne le choix d'afficher les element de la base qu'il veut.
    exemple la base contient :

    <a>

    <aa>cc</aa>

    <bb>bb</bb>

    </a>

    et les element de cette base n'est pas connu a l'avance.

    -l'utilisateur veut just afficher la colonne <aa></aa> ou <bb> seulement ou les deux ensemble
    ça veut dire le nombre de bouton chekbox et leurs nom tiré de la base.
    et aussi il a le droit d'afficher selement les element qui contient l'element "cc" qui est aussi le contenu des element et qui est tiré de la base.

    Merci et j'attend votre aide.

    mardi 27 novembre 2012 15:44
  • Dans ce cas, le code c’est bon.

    Pour chaque colonne on a un checkbox dans le checkedListBox.

    La colonne sera visible/cachée  sur la sélection dans checkedListBox.

    Cordialement,


    Aurel BERA, Microsoft
    Microsoft propose ce service gratuitement, dans le but d'aider les utilisateurs et d'élargir les connaissances générales liées aux produits et technologies Microsoft. Ce contenu est fourni "tel quel" et il n'implique aucune responsabilité de la part de Microsoft.

    mardi 27 novembre 2012 15:48
  • Dans ce cas, le code c’est bon.

    Pour chaque colonne on a un checkbox dans le checkedListBox.

    La colonne sera visible/cachée  sur la sélection dans checkedListBox.

    Cordialement,


    Aurel BERA, Microsoft
    Microsoft propose ce service gratuitement, dans le but d'aider les utilisateurs et d'élargir les connaissances générales liées aux produits et technologies Microsoft. Ce contenu est fourni "tel quel" et il n'implique aucune responsabilité de la part de Microsoft.

    bonjour
    je suis débutant et je n'est pas compris les ligne de code comment je les ajoutes 
    est ce que tu peut m'aider ??
    tu peut ajouter ces ligne de code a l'exemple précedent donnée par NESLINE 
    ça veut dire lorsque tu ajoute un element a la base cet element sera ajouter automatiqement au form comme bouton radio et tu peut l'afficher ou nn
    Merci bien pour ton aide
    mardi 27 novembre 2012 16:33
  • Bonjour

    Je ne peux pas télécharger ce projet - The webpage cannot be found.

    Mais essayez de comprendre au moins ce j’ai écrit, ce n’est pas un casse tète chinois, et comprendre quelques lignes de code ca vas vous aider dans votre futur développement. 

    Dans l’écran de design vous ajoutez le checkedListBox1 et avec F4 allez dans l’onglet de propriétés du checkedListBox1. Utilisez le boutton  

    pour avoir access aux evenements.

    Double clic sur ItemCheck et le système vas définir la fonction que sera appelée quand un élément est check/uncheck.

    Coller  dans ca la ligne

                dataGridView1.Columns[checkedListBox1.Items [e.Index].ToString() ].Visible = (e.NewValue == CheckState.Checked);

    Vous devez ajouter   

    foreach (DataColumn dc in ds.Tables[0].Columns)

                {

                    checkedListBox1.Items.Add(dc.ColumnName, true);

                }

    Apres vous charges le fichier XML dans le dataset et le bindez (normalement au chargement de la forme, donc   private void NOM_DE_LA_FORME_Load(object sender, EventArgs e)

     

    Cordialement,


    Aurel BERA, Microsoft
    Microsoft propose ce service gratuitement, dans le but d'aider les utilisateurs et d'élargir les connaissances générales liées aux produits et technologies Microsoft. Ce contenu est fourni "tel quel" et il n'implique aucune responsabilité de la part de Microsoft.

    mercredi 28 novembre 2012 08:06
  • j'ai corriger le lien .
    • Marqué comme réponse george_89 mercredi 28 novembre 2012 15:31
    mercredi 28 novembre 2012 09:29
  • Je suis totalement perdu.

    Le code ici ne fait pas ce que vous voulez ?

    Si vous appuyez Check Columns vous pouvez sélecter les colonnes visibles.

    N’est pas ?

    Ou j’ai manqué quelque chose de nouveau ?



    Aurel BERA, Microsoft
    Microsoft propose ce service gratuitement, dans le but d'aider les utilisateurs et d'élargir les connaissances générales liées aux produits et technologies Microsoft. Ce contenu est fourni "tel quel" et il n'implique aucune responsabilité de la part de Microsoft.



    mercredi 28 novembre 2012 09:50
  • Salut Aurel, oui j'ai rajouter le code qui manquer.
    mercredi 28 novembre 2012 10:00
  • Salut Aurel, oui j'ai rajouter le code qui manquer.
    cette methode necessite une base deonneé xml qui contient un schema xml
    est ce que sans schema xml la méthode de chakbox ne fonctionne pas ????
    c'est utile le shéma pour cette opération ?
    mercredi 28 novembre 2012 15:32
  • Le point que je vois est plutôt qu'Aurel indiquait "après vous chargez le fichier XML dans le dataset". Il faut le charger AVANT pour que le schéma ait pu être déduit du fichier XML au moment de son chargement et donc que l'on puisse accéder à la liste des colonnes.

    Sinon expliquez plutôt le problème (message d'erreur et ligne ou se situe l'erreur) pour que l'on puisse déjà savoir quel est le problème exact que vous avez. Avec le message ci-dessus, on est obligé de deviner ce qui arrive (et donc pour l'instant je dirais que vous essayez peut-être de parcourir les colonnes avant de charger le fichier XML et que le code plante car le dataset n'existe pas ou au moins est vide de toute table, charger le fichier XML avant devrait résoudre ce problème).


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

    mercredi 28 novembre 2012 15:46
  • Le point que je vois est plutôt qu'Aurel indiquait "après vous chargez le fichier XML dans le dataset". Il faut le charger AVANT pour que le schéma ait pu être déduit du fichier XML au moment de son chargement et donc que l'on puisse accéder à la liste des colonnes.

    Sinon expliquez plutôt le problème (message d'erreur et ligne ou se situe l'erreur) pour que l'on puisse déjà savoir quel est le problème exact que vous avez. Avec le message ci-dessus, on est obligé de deviner ce qui arrive (et donc pour l'instant je dirais que vous essayez peut-être de parcourir les colonnes avant de charger le fichier XML et que le code plante car le dataset n'existe pas ou au moins est vide de toute table, charger le fichier XML avant devrait résoudre ce problème).


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

    non il n'ya pas de problème dans l'application mais just je veux savoir l'utlité de schéma xml dans la base?
    et est ce que ça pose pas un problème lorsque on ignore le shéma ???? 

    Merci bien

    mercredi 28 novembre 2012 15:53
  • Ok, c'est le "nécessite" qui me gênait.

    A priori cela marche sans schéma. Le schéma est déduit des données lorsque le fichier XML est chargé dans le DataSet. Avoir un schéma reste intéressant car permet par exemple d'indiquer une taille maximale pour les colonnes texte, un type de données exacte (si je trouve 10 sans autre indication dans un fichier XML, ais je le droit de mettre un nombre décimal ? un nombre négatif etc ou même est ce un simple champ texte dans lequel on a mis les caractères 1 et 0...) ou même de mettre des contraintes entre tables donc un fichier XML sans schéma laissera certaines zones d'ombres (à priori cela marchera au moins au début mais pourra devenir plus délicat au fur et à mesure que vous aurez plus de données).

    Si vous créez un dataset et que vous le sauvez avec son schéma, ces infos sont écrites pour vous sans que vous ayez jamais à vous préoccuper du format exact de ce fichier (et donc vous pourrez indiquer la valeur par défaut de certaines colonnes, le type exact, des éventuels liens entre tables etc...)


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

    mercredi 28 novembre 2012 16:13
  • Salut,

    cette méthode nécessite une base de donnée xml qui contient un schema xml

    Ici on a pas de base de donnée, on a un fichier, le schéma n'est là que pour ne pas perdre la structure du fichier.  

    Vous parler de la sauvegarde ?

    MaTable.WriteXml("MaTable.xml",XmlWriteMode.WriteSchema);

    est ce que sans schema xml la méthode de chekbox ne fonctionne pas ???? c'est utile le schema pour cette opération ?

    La CheckedListBox  ne traite pas la structure du fichier mais son aspect visuel sinon tu peut remplacer 

    dataGridView1.Columns[ColN].Visible = checkForm.checkedListBox1.GetItemChecked(ColN);

    par

    MaTable.Columns.RemoveAt(ColN);

    mais il faut revoir la boucle et attention au dégât, parce que le contenue des champs est perdu.

    la boucle :

    ColN = dataGridView1.Columns.Count-1;
                    
    while (ColN>=0)
          {
            if  (!checkForm.checkedListBox1.GetItemChecked(ColN))
                 MaTable.Columns.RemoveAt(ColN);
            ColN--;
          }


    mercredi 28 novembre 2012 19:30
  • Salut,

    cette méthode nécessite une base de donnée xml qui contient un schema xml

    Ici on a pas de base de donnée, on a un fichier, le schéma n'est là que pour ne pas perdre la structure du fichier.  

    Vous parler de la sauvegarde ?

    MaTable.WriteXml("MaTable.xml",XmlWriteMode.WriteSchema);

    est ce que sans schema xml la méthode de chekbox ne fonctionne pas ???? c'est utile le schema pour cette opération ?

    La CheckedListBox  ne traite pas la structure du fichier mais son aspect visuel sinon tu peut remplacer 

    dataGridView1.Columns[ColN].Visible = checkForm.checkedListBox1.GetItemChecked(ColN);

    par

    MaTable.Columns.RemoveAt(ColN);

    mais il faut revoir la boucle et attention au dégât, parce que le contenue des champs est perdu.

    la boucle :

    ColN = dataGridView1.Columns.Count-1;
                    
    while (ColN>=0)
          {
            if  (!checkForm.checkedListBox1.GetItemChecked(ColN))
                 MaTable.Columns.RemoveAt(ColN);
            ColN--;
          }


    bonjour
    la suppression avec cette methode ça marche pas ???

    lundi 3 décembre 2012 16:23