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

C# Discussion :

Treeview récupérer valeur sélectionnée [Débutant]


Sujet :

C#

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 33
    Points : 22
    Points
    22
    Par défaut Treeview récupérer valeur sélectionnée
    Bonjour à tous,

    voilà j'ai fait un code en vb.net que je dois convertir en C#.
    J'ai un treeview(WPF remplit avec un dataset et des datarelations) et je voudrai récupérer la valeur que doit me retourner le treeview quand je clique dessus.

    En VB.net, j'avais fait ça :
    Code VB.NET : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Dim itemTreeview As TreeViewItem = CType(Me.ArboTypeArt.ItemContainerGenerator.ContainerFromItem(e.NewValue), TreeViewItem)
                If itemTreeview IsNot Nothing Then
                    itemTreeview.IsSelected = True
                    itemTreeview.IsExpanded = True
                Else
                    'c'est un enfant, on recupere l'id article
                    Dim index As Integer
                    index = Me.ArboTypeArt.SelectedItem(0)

    J'ai réussi à faire ça en C# mais je bloque sur l'index.
    Pouvez-vous m'aider s'il vous plait?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    TreeViewItem itemTreeview = (TreeViewItem)ArboTypeArt.ItemContainerGenerator.ContainerFromItem(e.NewValue);
                if (itemTreeview != null)
                {
                    //MessageBox.Show("parent");
                    itemTreeview.IsSelected = true;
                    itemTreeview.IsExpanded = true;
                }else{
                    //MessageBox.Show("enfant");
                    //c'est un enfant, on recupere l'id article
                    int index;
                       index = ArboTypeArt.SelectedItem;
                    //MessageBox.Show(Convert.ToString(index));
    Le XAML (au cas où vous en ayez besoin) :
    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
     
     <Window.Resources>
            <DataTemplate x:Key="PropTemplate">
                <TextBlock Text="{Binding Nom}"></TextBlock>
            </DataTemplate>
            <HierarchicalDataTemplate x:Key="ArticleTemplate" 
                                      ItemsSource="{Binding childRelation2}" 
                                      ItemTemplate="{StaticResource PropTemplate}">
                <!--*****Style qui desactive les enfants...*****-->
                <HierarchicalDataTemplate.ItemContainerStyle>
                    <Style TargetType="{x:Type TreeViewItem}">
                        <Setter Property="IsEnabled" Value="false"/>
                    </Style>
                </HierarchicalDataTemplate.ItemContainerStyle>
                <TextBlock Text="{Binding Designation}" >
                    <TextBlock.ContextMenu>
                        <ContextMenu>
                            <MenuItem Name="SupprArtArbo" Header="Supprimer cet article" Click="btnValidSupprArt_Click"/>
                        </ContextMenu>
                    </TextBlock.ContextMenu> 
                </TextBlock>
            </HierarchicalDataTemplate>
            <HierarchicalDataTemplate x:Key="TypeArticleTemplate" 
                                      ItemsSource="{Binding childRelation}" 
                                      ItemTemplate="{StaticResource ArticleTemplate}">
                <TextBlock Text="{Binding Nom}"></TextBlock>
            </HierarchicalDataTemplate>
        </Window.Resources>
    <TreeView Name="ArboTypeArt" DockPanel.Dock="Left" Background="Azure" Width="200" Margin="10,10,21,30" 
                      ItemsSource="{Binding TypeArticle}"
                      ItemTemplate="{StaticResource TypeArticleTemplate}" SelectedItemChanged="ArboChangeSelection">
            </TreeView>
    Merci pour votre aide à tous.

  2. #2
    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
    - (0) en VB représente l'accès à un élément d'une collection par son index ; en C# ça se traduit par [0].
    - En C# les conversions doivent généralement être explicites ; SelectedItem[0] renvoie un object, donc pour l'affecter à un entier il faut faire une conversion :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    index = (int)ArboTypeArt.SelectedItem[0];

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 33
    Points : 22
    Points
    22
    Par défaut
    Bonjour à tous et merci tomlev pour ta réponse.

    Malheureusement, cela ne résout pas mon problème puisque cela génère une nouvelle erreur :
    Cannot apply indexing with [] to an expression of type 'object'.
    D'avance, merci pour votre aide. J'ai beau chercher, je tourne en rond (pas facile de débuter)!

  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
    OK... quel est le type des éléments de ton TreeViewItem?

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 33
    Points : 22
    Points
    22
    Par défaut
    J'avoue que je suis assez gêné parce que je ne sais pas trop répondre à cette question
    Ce sont des textbox et sous vb.net ça me retournait un entier (IDArticle) suivant la datarelation 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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
     
    public System.Data.DataSet GetRelationalData()
            {
                //cette fonction permet de récupérer les types d'articles, articles et propriétés externes à afficher dans l'arborescence 
                //avec un dataset remplit à partir de relations entre les différentes tables
     
                System.Data.DataSet dataSet = new System.Data.DataSet();
     
                string reqTypeArt = "SELECT * FROM TypeArticle ORDER BY Nom ASC;";
                System.Data.DataTable tableTypeArticle = Bd.GetTableRelationDataset(dataSet, reqTypeArt, "TypeArticle");
     
                string reqArt = "SELECT * FROM Articles ORDER BY Designation ASC;";
                System.Data.DataTable tableArticle = Bd.GetTableRelationDataset(dataSet, reqArt, "Articles");
     
                string reqPropExt = "SELECT * FROM PropExtParArticle PA, ProprieteExterne P WHERE P.IDProprieteExt = PA.IDProprieteExt;";
                System.Data.DataTable tablePropExt = Bd.GetTableRelationDataset(dataSet, reqPropExt, "PropExtParArticle");
     
                System.Data.DataColumn table1Column = dataSet.Tables[tableTypeArticle.TableName].Columns["IDTypeArticle"];
                System.Data.DataColumn table2Column = dataSet.Tables[tableArticle.TableName].Columns["IDTypeArticle"];
                System.Data.DataColumn table3Column = dataSet.Tables[tableArticle.TableName].Columns["IDArticle"];
                System.Data.DataColumn table4Column = dataSet.Tables[tablePropExt.TableName].Columns["IDArticle"];
     
                System.Data.DataRelation CategoryRelation;
                CategoryRelation = new DataRelation("childRelation", table1Column, table2Column);
                System.Data.DataRelation CategoryRelation2;
                CategoryRelation2 = new DataRelation("childRelation2", table3Column, table4Column);
                //CategoryRelation.Nested = True
                //CategoryRelation2.Nested = True
     
                dataSet.Relations.Add(CategoryRelation);
                dataSet.Relations.Add(CategoryRelation2);
     
                return dataSet;
            }
    Mais là je suis un peu perdu, j'espère avoir répondu à ta question?
    Merci encore.

  6. #6
    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
    OK, donc la source des données est une DataTable ?
    Dans ce cas chaque TreeViewItem doit correspondre à un DataRowView, et toi tu veux la première colonne du DataRowView
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    DataRowView drv = (DataRowView)ArboTypeArt.SelectedItem;
    index = (int)drv[0];
    Par contre il vaut mieux utiliser le nom de la colonne que l'index...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    index = (int)drv["IDArticle"];

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 33
    Points : 22
    Points
    22
    Par défaut
    OK oui c'était bien une datatable.
    Merci beaucoup tomlev et bonne journée à tous.

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 03/10/2012, 14h51
  2. problème pour récupérer valeur sélectionnée de combobox
    Par batou22003 dans le forum Développement Windows
    Réponses: 2
    Dernier message: 03/02/2011, 11h30
  3. Récupérer valeur sélectionnée dans une Liste déroulante
    Par coeurdange dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 21/08/2008, 15h27
  4. Réponses: 1
    Dernier message: 16/05/2007, 12h51
  5. Réponses: 4
    Dernier message: 03/05/2007, 20h27

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