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] selection d'une cellule ds une DataGrid


Sujet :

Windows Presentation Foundation

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Inscrit en
    Mars 2011
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 8
    Par défaut [WPF] selection d'une cellule ds une DataGrid
    Bonjour,

    je souhaite recupérer la valeur d'une cellule dans ma Datagrid constituée et l'affichier ds un label1. Plus particulièrement après un double clique de souris sur la cellule concernée.
    Hélas, je ne récupère que la valeur que je spécifie sur mon tableau. Or j'aimerai récupérer celle de la position du double clique de la souris qui peut être la colonne 1,2,3....
    Une idée ?

    c#
    Code c# : 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
     
        public partial class MainWindow : Window
        {
            private DataTable _ResultADObject;
            public MainWindow()
            {
                //creation de mon tableau
                _ResultADObject = new DataTable();
                _ResultADObject.Columns.Add(new DataColumn("Catégorie", typeof(string)));
                _ResultADObject.Columns.Add(new DataColumn("Name", typeof(string)));
                _ResultADObject.Columns.Add(new DataColumn("Description", typeof(string)));
                _ResultADObject.Columns.Add(new DataColumn("Location", typeof(string)));
     
                InitializeComponent();
            }
     
            public DataTable ResultADObject
            { get { return _ResultADObject; } }
    ...
    ...
    ...
     
            private void dataGrid1_MouseDoubleClick(object sender, MouseButtonEventArgs e)
            {
                //recupère la valeur de la cellule double cliqué.
                //label1.Content = _ResultADObject.Select();
                DataRowView dr = dataGrid1.SelectedItem as DataRowView;
                DataRow dr1 = dr.Row;
                label1.Content = Convert.ToString(dr1.ItemArray[2]);  
     
            }
    }


    xaml
    Code xml : 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="WpfApplication2.MainWindow" Name="This"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            Title="MainWindow" Height="350" Width="525">
        <Grid>
            <DataGrid ItemsSource="{Binding ElementName=This, Path=ResultADObject}" AutoGenerateColumns="True" IsReadOnly="True" Height="153" HorizontalAlignment="Left" Margin="34,158,0,0" Name="dataGrid1" VerticalAlignment="Top" Width="434" MouseDoubleClick="dataGrid1_MouseDoubleClick" />
            <TextBox Height="22" HorizontalAlignment="Left" Margin="34,10,0,0" Name="textBox1" VerticalAlignment="Top" Width="120" />
            <Button Content="Search" Height="23" HorizontalAlignment="Left" Margin="182,12,0,0" Name="button1" VerticalAlignment="Top" Width="75" Click="button1_Click_1" />
            <CheckBox Content="PC" Height="16" HorizontalAlignment="Left" Margin="36,39,0,0" Name="checkBox1" VerticalAlignment="Top" IsChecked="True" />
            <CheckBox Content="User" Height="16" HorizontalAlignment="Right" Margin="0,39,376,0" Name="checkBox2" VerticalAlignment="Top" IsChecked="True" />
            <Label Height="28" HorizontalAlignment="Left" Margin="36,95,0,0" Name="label1" VerticalAlignment="Top" Width="432" />
        </Grid>
    </Window>

    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
    Par défaut
    Salut,

    Est-ce que tu as essayé de voir ce que valent les propriétés :

    ?

  3. #3
    Membre du Club
    Inscrit en
    Mars 2011
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 8
    Par défaut
    Non, je ne trouve pas mon champs (mis à part ds l'ItemArray) quand j'explore toutes les valeurs des arguements. Mais bon, mon niveau en c# est très faible.


    ci joins mes tests par paragraphe, mais ca ne donne pas grand chose.

    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
     
                //DataRowView dr = dataGrid1.SelectedItem as DataRowView;
                //DataRowView dr = dataGrid1.CurrentCell.Item as DataRowView;
                //DataRow dr1 = dr.Row;
                //label1.Content = Convert.ToString(dr1.ItemArray[2]);
     
                DataRowView dr = dataGrid1.SelectedCells as DataRowView;
                DataRow dr1 = dr.Row;
                label1.Content = (dr1.ToString());
     
                //DataGrid dataGrid1 = (DataGrid)sender;
                //var selectedRowObject = dataGrid1.SelectedItem;
     
                //var item = dataGrid1.SelectedItem as DataRowView;
                //label1.Content = item.Row.ToString();
     
     
                //label1.Content = _ResultADObject.Select();

  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
    Par défaut
    Alors tu peux dans ce cas t'abonner au MouseDoubleClick spécifique à la cellule :
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
              <Style TargetType="{x:Type dg:DataGridCell}">
                <EventSetter Event="MouseDoubleClick" Handler="dgcMouseDoubleClick" />
              </Style>

    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        private void dgcMouseDoubleClick(object sender, MouseButtonEventArgs e) {
          // Là il faut récupérer la cellule via 'sender' 
          // et récupérer le Content ou DataContext de ta cellule
          MessageBox.Show(((DataGridCell)sender).Content.ToString());
        }

  5. #5
    Membre du Club
    Inscrit en
    Mars 2011
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 8
    Par défaut
    pour le fichier xaml, je l'ecris comme suit ?
    car ca compile pas :
    System.Windows.Markup.XamlParseException occurred
    Message='L'ajout d'une valeur à la collection de type 'System.Windows.Controls.ItemCollection' a levé une exception.' numéro de ligne '8' et position de ligne '18'.
    Code
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
        <Grid>
            <DataGrid ItemsSource="{Binding ElementName=This, Path=ResultADObject}" AutoGenerateColumns="True" IsReadOnly="True" Height="153" HorizontalAlignment="Left" Margin="34,158,0,0" Name="dataGrid1" VerticalAlignment="Top" Width="434">
                <Style TargetType="{x:Type DataGridCell}">
                    <EventSetter Event="MouseDoubleClick" Handler="dataGrid1_MouseDoubleClick" />
                </Style>
            </DataGrid>
            <TextBox Height="22" HorizontalAlignment="Left" Margin="34,10,0,0" Name="textBox1" VerticalAlignment="Top" Width="120" KeyUp="textBox1_KeyUP" />
            <Button Content="Search" Height="23" HorizontalAlignment="Left" Margin="182,12,0,0" Name="button1" VerticalAlignment="Top" Width="75" Click="button1_Click_1" />
            <CheckBox Content="PC" Height="16" HorizontalAlignment="Left" Margin="36,39,0,0" Name="checkBox1" VerticalAlignment="Top" IsChecked="True" />
            <CheckBox Content="User" Height="16" HorizontalAlignment="Right" Margin="0,39,376,0" Name="checkBox2" VerticalAlignment="Top" IsChecked="True" />
            <Label Height="28" HorizontalAlignment="Left" Margin="36,95,0,0" Name="label1" VerticalAlignment="Top" Width="432" />
        </Grid>

    Merci.

  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
    Par défaut
    Non, il faut le mettre dans les ressources.
    Là comme le double clic est propre à cette DataGrid, tu peux le mettre dans les ressources de ta DataGrid :

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
        <Grid>
            <DataGrid ItemsSource="{Binding ElementName=This, Path=ResultADObject}" AutoGenerateColumns="True" IsReadOnly="True" Height="153" HorizontalAlignment="Left" Margin="34,158,0,0" Name="dataGrid1" VerticalAlignment="Top" Width="434">
              <DataGrid.Resources>
                <Style TargetType="{x:Type DataGridCell}">
                    <EventSetter Event="MouseDoubleClick" Handler="dataGrid1_MouseDoubleClick" />
                </Style>
              </DataGrid.Resources>
            </DataGrid>
            <TextBox Height="22" HorizontalAlignment="Left" Margin="34,10,0,0" Name="textBox1" VerticalAlignment="Top" Width="120" KeyUp="textBox1_KeyUP" />
            <Button Content="Search" Height="23" HorizontalAlignment="Left" Margin="182,12,0,0" Name="button1" VerticalAlignment="Top" Width="75" Click="button1_Click_1" />
            <CheckBox Content="PC" Height="16" HorizontalAlignment="Left" Margin="36,39,0,0" Name="checkBox1" VerticalAlignment="Top" IsChecked="True" />
            <CheckBox Content="User" Height="16" HorizontalAlignment="Right" Margin="0,39,376,0" Name="checkBox2" VerticalAlignment="Top" IsChecked="True" />
            <Label Height="28" HorizontalAlignment="Left" Margin="36,95,0,0" Name="label1" VerticalAlignment="Top" Width="432" />
        </Grid>

Discussions similaires

  1. Réponses: 1
    Dernier message: 13/04/2015, 12h17
  2. [Toutes versions] coller les données d'une plage d'une cellule dans une cellule d'une autre feuille[VBA]
    Par arthson dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 24/01/2012, 18h37
  3. [XL-2007] problème de codage en vba ("copie d'une partie d'une cellule dans une cellule vide")
    Par skipeemed dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 26/10/2010, 18h01
  4. [XL-2002] Macro de comparaison d'une cellule d'une feuille avec une cellule d'une autre feuille.
    Par steelydan dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 08/09/2010, 13h59
  5. Recherche une valeur d'une cellule dans une colonne d'une autre feuille
    Par kourria dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 21/06/2007, 14h48

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