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 :

Ouvrir une form a partir dun double clique sur datagrid


Sujet :

Windows Presentation Foundation

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Mars 2011
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 48
    Points : 0
    Points
    0
    Par défaut Ouvrir une form a partir dun double clique sur datagrid
    Bonjour,

    J'ai un datagrid que j'alimente via ma base de donnée j'aimerais que quand je double clique sur une ligne de mon datagrid qu'il m'ouvre une form avec les données

    j'ai fait des recherches sur le net mais je trouve pas grand chose

    Pouvez vous m'aidez svp?

    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
    Points : 3 015
    Points
    3 015
    Par défaut
    Salut,

    On peut trouver des DataGrid dans les technologies Windows Form, WPF, ASP.NET ou encore Silverlight.

    Il faut être plus précis et même éventuellement poster dans le bon forum

  3. #3
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 175
    Points : 25 116
    Points
    25 116
    Par défaut
    event celldoubleclick ?

  4. #4
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Mars 2011
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 48
    Points : 0
    Points
    0
    Par défaut
    J'utilise le WPF et pour mon datagrid j'utilise le binding avec microsoft visual studio 2010

  5. #5
    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
    Points : 3 015
    Points
    3 015
    Par défaut
    Tu peux t'abonner au double clic sur une DataGridRow de cette manière :
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <DataGrid ... >
      <DataGrid.Resources>
        <Style TargetType="{x:Type DataGridRow}">
          <EventSetter Event="MouseDoubleClick" Handler="dgr_MouseDoubleClick" />
          ...
        </Style>
      </DataGrid.Resources>
    </DataGrid>

    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    private void dgr_MouseDoubleClick(object sender, RoutedEventArgs e) {
      // le sender est l'item sélectionné
     
    }

  6. #6
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Mars 2011
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 48
    Points : 0
    Points
    0
    Par défaut
    sa ne marche pas

    J'ai fait comme ceci aussi mais sa ne fonctionne pas


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public Select()
            {
                InitializeComponent();
                dataGrid1.MouseDoubleClick+=new MouseButtonEventHandler(dataGrid1_MouseDoubleClick);
            }
     
            private void dataGrid1_MouseDoubleClick(object sender, MouseButtonEventArgs e)
            {
                //MainWindow form1 = new  MainWindow();
                //form1.ShowDialog();
            }
    Quand je clique sur la ligne j'ai ce méssage :

    'EditItem' n'est pas autorisé pour cette vue.

  7. #7
    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
    Points : 3 015
    Points
    3 015
    Par défaut
    Citation Envoyé par moonshine972
    sa ne marche pas
    Si cette solution marche. Tu as du faire une erreur. Donne nous plus de détails ce qui ne "marche" pas.

    Citation Envoyé par moonshine972
    J'ai fait comme ceci aussi mais sa ne fonctionne pas


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public Select()
            {
                InitializeComponent();
                dataGrid1.MouseDoubleClick+=new MouseButtonEventHandler(dataGrid1_MouseDoubleClick);
            }
    Cette solution peut fonctionner également.
    Là tu mets l'évènement double clic sur la DataGrid tout entière. Il y a moyen à partir de cet évènement de récupérer la DataGridRow cliquée en parcourant le VisualTreeHelper de cette manière :
    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
        private void dataGrid1_MouseDoubleClick(object sender, MouseButtonEventArgs e) {
          DependencyObject depObj = e.OriginalSource as DependencyObject;
          if (depObj != null) {
            DependencyObject current = depObj;
            while (current != null && current != this.DataGrid1) {
              DataGridRow dgr = current as DataGridRow;
              if (dgr != null) {
                // Travail avec le DataGridRow
     
                return;
              }
              current = VisualTreeHelper.GetParent(current);
            }
          }
        }

    Par contre ton erreur, elle ne me parle pas. Montre éventuellement ton code dans sa globalité (xaml y compris)

  8. #8
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Mars 2011
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 48
    Points : 0
    Points
    0
    Par défaut
    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
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    <Window x:Class="WpfApplication1.Window1"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            Title="Window1" Height="451" Width="721" WindowStartupLocation="CenterScreen" OpacityMask="{x:Null}">
        <Grid>
            <Button Content="Enregistrer" Height="23" HorizontalAlignment="Left" Margin="509,367,0,0" Name="button1" VerticalAlignment="Top" Width="75" Click="button1_Click_1" />
            <TextBox Height="23" HorizontalAlignment="Left" Margin="88,92,0,0" Name="textBox1" VerticalAlignment="Top" Width="120" TextChanged="textBox1_TextChanged" />
            <TextBox Height="23" HorizontalAlignment="Left" Margin="87,135,0,0" Name="textBox2" VerticalAlignment="Top" Width="120" />
            <TextBox Height="23" HorizontalAlignment="Left" Margin="88,179,0,0" Name="textBox3" VerticalAlignment="Top" Width="120" />
            <TextBlock Height="23" HorizontalAlignment="Left" Margin="46,92,0,0" Name="textBlock1" Text="Nom :" VerticalAlignment="Top" />
            <TextBlock Height="23" HorizontalAlignment="Left" Margin="31,138,0,0" Name="textBlock2" Text="Prénom :" VerticalAlignment="Top" />
            <TextBlock Height="23" HorizontalAlignment="Left" Margin="28,179,0,0" Name="textBlock3" Text="Message :" VerticalAlignment="Top" />
            <Button Content="Quitter" Height="23" HorizontalAlignment="Left" Margin="590,367,0,0" Name="button2" VerticalAlignment="Top" Width="75" Click="button2_Click" />
            <Button Content="Rechercher" Height="23" HorizontalAlignment="Left" Margin="165,23,0,0" Name="button3" VerticalAlignment="Top" Width="75" Click="button3_Click" />
            <TextBox Height="23" HorizontalAlignment="Left" Margin="27,24,0,0" Name="textBox4" VerticalAlignment="Top" Width="120" />
            <Button Content="M.A.J" Height="23" HorizontalAlignment="Left" Margin="420,367,0,0" Name="button4" VerticalAlignment="Top" Width="75" Click="button4_Click" />
            <DataGrid AutoGenerateColumns="False" Height="186" HorizontalAlignment="Left" Margin="241,92,0,0" Name="dataGrid1" VerticalAlignment="Top" Width="424" SelectionChanged="dataGrid1_SelectionChanged" >
                <DataGrid.Resources>
                    <Style TargetType="{x:Type DataGridRow}">
                        <EventSetter Event="MouseDoubleClick" Handler="dgr_MouseDoubleClick" />
                    </Style>
                </DataGrid.Resources>
                <DataGrid.Columns>
                            <DataGridTextColumn Header="Nom" Binding="{Binding Path=nom}" />
                    <DataGridTextColumn Header="Prenom" Binding="{Binding Path=prenom}" />
                    <DataGridTextColumn Header="Sexe" Binding="{Binding Path=sexe}" />
                    <DataGridTextColumn Header="Message" Binding="{Binding Path=message}" />
                        </DataGrid.Columns>
            </DataGrid>
        </Grid>
    </Window>

    Le code qui me permet de voir compléter le datagrid

    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
    private void button3_Click(object sender, RoutedEventArgs e)
            {
                // Instancier l’objet Command
                using (MySqlCommand wCommand = MainWindow.wConnexion.CreateCommand())
                {
                    // Définition de la requête
                    wCommand.CommandText = "SELECT * FROM hibis_t WHERE nom = '" + textBox4.Text + "'";
     
                    // Lecture des résultats
                    using (MySqlDataReader wReader = wCommand.ExecuteReader())
                    {
                        // Remplir le textbox
                        while (wReader.Read())
                        {
                            string wItem = wReader["nom"].ToString();
                            string wItems = wReader["prenom"].ToString();
                            string wItem3 = wReader["message"].ToString();
                            string wItem4 = wReader["sexe"].ToString();
     
     
                            textBox1.Text = (wItem);
                            textBox2.Text = (wItems);
                            textBox3.Text = (wItem3);
                            dataGrid1.Items.Add(
                              new MyData() { nom = wItem, prenom = wItems, sexe = wItem4, message = wItem3 });
                        }
                    }
                }
            }
    Le code pour le double clique ( ton code ):

    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
     private void dgr_MouseDoubleClick(object sender, RoutedEventArgs e)
            {
                // le sender est l'item sélectionné
                DependencyObject depObj = e.OriginalSource as DependencyObject;
                if (depObj != null) {
                DependencyObject current = depObj;
                while (current != null && current != this.dataGrid1) {
                 DataGridRow dgr = current as DataGridRow;
                if (dgr != null) {
                // Travail avec le DataGridRow
     
                return;
              }
              current = VisualTreeHelper.GetParent(current);
            }
          }
        }
            }
     
     
        }

  9. #9
    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
    Points : 3 015
    Points
    3 015
    Par défaut
    Tu mélanges les réponses que je te donne

    Le code que tu as copié dans 'dgr_MouseDoubleClick' (soit l'événement Double Clic sur la DataGridRow), correspond au code que moi j'ai mis dans 'dataGrid1_MouseDoubleClick' soit le cas où tu choisis de t'abonner à l'événement double clic sur ta DataGrid...



    Sans changer ton code xaml, si tu affiches une MessageBox dans 'dgr_MouseDoubleClick' de cette manière :
    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    private void dgr_MouseDoubleClick(object sender, RoutedEventArgs e)
    {
      // le sender est l'item sélectionné
      MessageBox.Show(((DataGridRow)sender).GetType().ToString());
    }

    Est-ce que la MessageBox s'affiche ?
    Si oui, qu'est-ce qui est affiché dans la MessageBox ? (peut-être quelque chose comme "DataGridRow")

  10. #10
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Mars 2011
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 48
    Points : 0
    Points
    0
    Par défaut
    Ok j'ai rectifié les choses..

    J'obtiens ceci

    Erreur 1 'MessageBox' est une référence ambiguë entre 'System.Windows.MessageBox' et 'System.Windows.Forms.MessageBox'
    Il me souligne MessageBox

  11. #11
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Mars 2011
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 48
    Points : 0
    Points
    0
    Par défaut
    j'ai supprimé le using form... il ne me le souligne plus
    quand je double clique sur la ligne de mon datagrid j'ai tjrs le meme message suivant :
    'EditItem' n'est pas autorisé pour cette vue.

  12. #12
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Mars 2011
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 48
    Points : 0
    Points
    0
    Par défaut
    Quand je fais un clique droit sur ma ligne dans le datagrid j'ai un message qui apparait

    system.windows.controls.datagridrow

  13. #13
    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
    Points : 3 015
    Points
    3 015
    Par défaut
    C'est bizarre que la messageBox soit déclenché sur le clic droit !?

    Comme je ne comprend pas vraiment l'erreur sur le double clic, est-ce que tu peux essayer (pour tester) de mettre ta DataGrid en mode ReadOnly (ajout de
    au niveau de la DataGrid) ?

    Est-ce que dans ce mode tu as toujours le message d'erreur ?

  14. #14
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Mars 2011
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 48
    Points : 0
    Points
    0
    Par défaut
    quand je fais un clique droit ou gauche jai le meme message avec

    En tout cas il m'ouvre la fenetre maintenant quand je double clique sur la ligne avec le bouton gauche.

    Comment puis je faire pour récupérer la ligne et faire la requette sur ma base mysql et l'afficher dans ma nouvelle form?

    merci

  15. #15
    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
    Points : 3 015
    Points
    3 015
    Par défaut
    Citation Envoyé par moonshine972
    quand je fais un clique droit ou gauche jai le meme message avec
    Ça c'est vraiment bizarre... Je sèche sur ce point. Vérifie une fois de plus que l'évènement que tu utilises est bien l'événement MouseDoubleClick et pas un autre. Soit dans ton code xaml, vérifies que tu as :
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
                <DataGrid.Resources>
                    <Style TargetType="{x:Type DataGridRow}">
                        <EventSetter Event="MouseDoubleClick" Handler="dgr_MouseDoubleClick" />
                    </Style>
                </DataGrid.Resources>


    Citation Envoyé par moonshine972
    Comment puis je faire pour récupérer la ligne et faire la requette sur ma base mysql et l'afficher dans ma nouvelle form?
    Pour récupérer la ligne, c'est au niveau de la DataGridRow (voir propriété Item ou DataContext). Puis tu peux donner ton objet au constructeur de ta nouvelle fenêtre :
    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
        private void dgr_MouseDoubleClick(object sender, RoutedEventArgs e) {
          // le sender est l'item sélectionné
          MyData mydata = ((DataGridRow)sender).Item as MyData;
     
          // mydata est ta ligne, tu peux ainsi récupérer tes informations :
          MessageBox.Show(mydata.prenom);
     
          // mydata peut être donné au constructeur de ta fenêtre
          ...
        }

  16. #16
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Mars 2011
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 48
    Points : 0
    Points
    0
    Par défaut
    j'ai ce méssage d'erreur :

    Erreur 1 L'opérateur as doit être utilisé avec un type référence ou un type Nullable ('WpfApplication1.Select.MyData' est un type valeur qui n'autorise pas les valeurs null)
    j'ai vérifié le xaml il est bon mais depuis que j'ai ajouté " isreadyonly = true " je peux double cliquer sur le bouton gauche. Merci

  17. #17
    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
    Points : 3 015
    Points
    3 015
    Par défaut
    Essaies de modifier la ligne suivante :

    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    // le sender est l'item sélectionné
    MyData mydata = ((DataGridRow)sender).Item as MyData;
    par :
    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    // le sender est l'item sélectionné
    MyData mydata = (MyData)((DataGridRow)sender).Item;

  18. #18
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Mars 2011
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 48
    Points : 0
    Points
    0
    Par défaut
    Merci j'ai le retour du messageBox
    sa fonctionne mais je ne sais pas comment remplir ma deuxieme form en fonction de mon double clique sur la ligne du datagrid

  19. #19
    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
    Points : 3 015
    Points
    3 015
    Par défaut
    Comme je l'ai dit auparavant, tu peux donner ton objet mydata au constructeur de ta Form2 :
    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Form2 f2 = new Form2(mydata);
    f2.Show();

    Il faut bien sûr avoir défini un constructeur du côté de Form2 acceptant un argument de type MyData :
    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public Form2(MyData data) {
      // et là tu es dans ta Form2 et tu disposes de ton objet mydata
      // tu peux alors remplir ta form ou faire ce que tu veux
     
    }

  20. #20
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Mars 2011
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 48
    Points : 0
    Points
    0
    Par défaut
    j'ai essayé mais il y a un probleme...

    J'ai ce message derreur
    La référence d'objet n'est pas définie à une instance d'un objet.

Discussions similaires

  1. Ouvrir une Form à partir d'un nom de variable
    Par AllyKo dans le forum VB.NET
    Réponses: 7
    Dernier message: 11/03/2009, 13h46
  2. Réponses: 6
    Dernier message: 04/08/2008, 16h36
  3. Réponses: 1
    Dernier message: 22/07/2008, 17h05
  4. Réponses: 4
    Dernier message: 09/11/2007, 14h24
  5. Problème de double clique sur barre de titre d'une form
    Par kheldoun ahmed dans le forum Delphi
    Réponses: 10
    Dernier message: 26/06/2007, 16h21

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