none
Donner le focus a une cellule d'un datagridview a la fin d'un drag and drop RRS feed

  • Question

  • Bonjour j'utilise un drag and drop de cellule en cellule dans un datagridview et je voudrais que quand je relâche la donnée dans la nouvelle cellule celle-ci prenne le focus 

     

    Dans l'évennement DragDrop:

     

    DataGridView1.CurrentCell = DataGridView1.Item(int_col_dest, int_ligne_dest)

    J'ai pas de message d"erreur, mais la cellule ou je relâche la donnée na toujours pas le focus(J'ai bien verifié les paramètre int_col_dest et int_lign_dest)

     

    J'ai mis le même code dans un bouton et quand je finis le drag and drop et que je click sur le boutton la cellule ou j ai déposé la donnée prend bien le focus !!!!!!!!!

     

    Je voudrais que la cellule ou je dépose la donnée prenne toute suite le focus.

     

    Comment faire

     

    Merci

    vendredi 14 mai 2010 14:01

Réponses

Toutes les réponses

  • Bonjour,

    Pouvez-vous m'envoyer un projet qui reproduit le problème sur gilles.tourreau@pos.fr ? Merci de mettre l'URL de cette conversation dans l'e-mail.

    Cordialement


    Gilles TOURREAU - MVP C# - Architecte .NET/Consultant/Formateur
    vendredi 14 mai 2010 19:09
    Modérateur
  • Bonjour,

     

    Pour donner le focus a le cellule que vous venez de compléter avec les données de drag and drop, utilisez cette commande dans la méthode dataGridView_DragDrop ou vous faites l’allocation de la valeur dans la cellule :

     

    DataGridView1.CurrentCell = DataGridView1.Rows[x].Cells[y] ;

     

    Avec x et y la ligne et la colonne de la cellule.

     

    Cordialement,

    Alex

     

     

     

     

    __________________________________________________________________________________________

    Publiez un article sur une de ces technologies : Visual Basic, C#, C++, .NET, ASP.NET, SQL Server, Silverlight

     

     

    mardi 18 mai 2010 12:28
  • Merci mais çà n'y change rien 

     

    Private Sub data_grid_carnet_DragDrop(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles data_grid_carnet.DragDrop
        Try
          'Pour stocker l'index de la ligne
          Dim int_ligne_selec As Integer = Convert.ToInt32(e.Data.GetData(Type.GetType("System.Int32")))
          'Coordonnée de la cellule quand on relache la souris
          Dim point_cellule As Point = Me.data_grid_carnet.PointToClient(New Point(e.X, e.Y))
          'Dim int_ligne_dest As Integer
          Dim str_cell As String '//Contient la valeur de la cellule sélectionnée
          'Dim int_col_dest As Integer
          Dim str_valeur_nouv_cell As String = String.Empty
    
          '//Récupère la donnée de la cellule
          str_cell = Me.data_grid_carnet.Rows(int_ligne_selec).Cells(int_col_exp).Value.ToString
    
          If str_cell <> vbNullString Then
            '//Coordonnée de la cellule
            int_ligne_dest = Me.data_grid_carnet.HitTest(point_cellule.X, point_cellule.Y).RowIndex
            int_col_dest = Me.data_grid_carnet.HitTest(point_cellule.X, point_cellule.Y).ColumnIndex
            If int_ligne_dest <> 7 Then
              If int_col_dest <> 0 Then
                '//Regarde si il ya deja une donnée dans la cellule.
                str_valeur_nouv_cell = data_table.Rows(int_ligne_dest).Item(int_col_dest).ToString
                If str_valeur_nouv_cell = vbNullString Then
                  '//Effacement du contenu de l'ancienne cellule
                  data_table.Rows(int_ligne_selec).Item(int_col_selec) = ""
                  '//Affichage du contenu dans la nouvelle cellule
                  data_row = data_table.Rows(int_ligne_dest)
                  data_row(int_col_dest) = str_cell
                  Call PROC_CHANGEMENT_DE_PLACE_RDV()
                  data_grid_carnet.CurrentCell = data_grid_carnet.Rows(int_ligne_dest).Cells(int_col_dest)
                  bool_focus = True
                End If
              End If
            End If
            '//On efface le contenu
            str_cell = ""
          End If
        Catch ex As Exception
          MsgBox(ex.Message)
        End Try
      End Sub

    jeudi 20 mai 2010 08:45
  • Bonjour,

     

    J’ai reproduit votre scenario et pour moi ça marche sans erreur :

    private void dataGridView1_DragDrop(object sender, DragEventArgs e)

            {

                try

                {

                    Point p = this.dataGridView1.PointToClient(new Point(e.X,e.Y));

                    int line;

                    int col;

     

     

                    line = this.dataGridView1.HitTest(p.X, p.Y).RowIndex;

                    col = this.dataGridView1.HitTest(p.X, p.Y).ColumnIndex;

     

     

                    dataGridView1.Rows[line].Cells[col].Value = ((Label)e.Data.GetData(typeof(Label))).Text;

                    this.dataGridView1.CurrentCell = dataGridView1.Rows[line].Cells[col];

                }

                catch

                {

                }

     

            }

     

     

    Avez-vous essayé de vérifier en debug ce qui se passe au niveau de CurrentCell ?

     

    Cordialement,

    Alex

     

     

     

    __________________________________________________________________________________________

    Publiez un article sur une de ces technologies : Visual Basic, C#, C++, .NET, ASP.NET, SQL Server, Silverlight, SharePoint 2010, SharePoint 2007

     

    jeudi 20 mai 2010 09:03
  • Puis je vous envoyer ma source ?

    Ça fais une semaine que je suis la-dessus

     

    j'ai encore essayé dans une source a part:

     

    Private Sub DataGridView1_DragDrop(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles data_grid_carnet.DragDrop
        Try
    
          'Pour stocker l'index de la ligne
          Dim int_ligne_selec As Integer = Convert.ToInt32(e.Data.GetData(Type.GetType("System.Int32")))
    
          'Coordonnée de la cellule quand on relache la souris
          Dim point_cellule As Point = data_grid_carnet.PointToClient(New Point(e.X, e.Y))
          'Dim int_ligne_dest As Integer
          Dim str_cell As String '//Contient la valeur de la cellule sélectionnée
          'Dim int_col_dest As Integer
          Dim str_valeur_nouv_cell As String = String.Empty
          Dim dr As DataRow
    
          '//Récupère la donnée de la cellule
          str_cell = data_grid_carnet.Rows(int_ligne_selec).Cells(int_col_exp).Value.ToString
    
          If str_cell <> vbNullString Then
            '//Coordonnée de la cellule
            int_ligne_dest = data_grid_carnet.HitTest(point_cellule.X, point_cellule.Y).RowIndex
            int_col_dest = data_grid_carnet.HitTest(point_cellule.X, point_cellule.Y).ColumnIndex
            If int_ligne_dest <> 7 Then
              If int_col_dest <> 0 Then
                '//Regarde si il ya deja une donnée dans la cellule.
                str_valeur_nouv_cell = dt.Rows(int_ligne_dest).Item(int_col_dest).ToString
                If str_valeur_nouv_cell = vbNullString Then
                  '//Effacement du contenu de l'ancienne cellule
                  dt.Rows(int_ligne_selec).Item(int_col_selec) = ""
                  '//Affichage du contenu dans la nouvelle cellule
    
                  dr = dt.Rows(int_ligne_dest)
                  dr(int_col_dest) = str_cell
                  data_grid_carnet.CurrentCell = data_grid_carnet.Rows(int_ligne_dest).Cells(int_col_dest)
                  bool_focus = True
                End If
              End If
            End If
            '//On efface le contenu
            str_cell = ""
          End If
    
        Catch ex As Exception
          MsgBox(ex.Message)
        End Try
      End Sub
    Quand je fais le drag and drop la cellule prend bien le focus mais pour ensuite donner le focus a une autre cellule vide je dois cliqué deux fois sur cette dernière alors que normalement il suffit de cliqué une seul fois .

    Merci de votre aide.

    jeudi 20 mai 2010 10:12
  • Bonjour,

     

    Vous pouvez envoyer votre projet en archive .zip ou .rar sur alexptr@live.com

     

    J’essayerai de revenir avec une réponse.

     

    Cordialement,

    Alex

    __________________________________________________________________________________________

    Publiez un article sur une de ces technologies : Visual Basic, C#, C++, .NET, ASP.NET, SQL Server, Silverlight, SharePoint 2010, SharePoint 2007

     

     

    vendredi 21 mai 2010 09:57
  • Bonjour,

    Il semblerait que cela soit un bogue du DataGridView après un Drag & Drop. Pouvez-vous reporter le problème à Microsoft sur le site http://connect.microsoft.com ?

    Cordialement


    Gilles TOURREAU - MVP C# - Architecte .NET/Consultant/Formateur
    samedi 22 mai 2010 17:35
    Modérateur