none
DataGridView - Comment réordonner les lignes après le glisser-déposer RRS feed

  • Discussion générale

  • Cette fonctionnalité n’est pas inclue dans le contrôle DataGridView, mais avec la technique standard pour glisser-déposer vous pouvez l’implémenter facilement. Le fragment de code ci-dessous montre comment vous pouvez accomplir cela. Il suppose que vous disposez d'un contrôle DataGridView sur votre formulaire nommé dataGridView1 et que la propriété AllowDrop de la grille est true et les événements nécessaires sont branchés pour les gestionnaires d'événements appropriés.

     

    private Rectangle dragBoxFromMouseDown;
    private int rowIndexFromMouseDown;
    private int rowIndexOfItemUnderMouseToDrop;
    private void dataGridView1_MouseMove(object sender, MouseEventArgs e)
    {
      if ((e.Button & MouseButtons.Left) == MouseButtons.Left)
      {
        // Si la souris depasse le rectangle, commencer le glissement
        if (dragBoxFromMouseDown != Rectangle.Empty &&
          !dragBoxFromMouseDown.Contains(e.X, e.Y))
        {          
          DragDropEffects dropEffect = dataGridView1.DoDragDrop(
                  dataGridView1.Rows[rowIndexFromMouseDown],
                  DragDropEffects.Move);
        }
      }
    }
     
    private void dataGridView1_MouseDown(object sender, MouseEventArgs e)
    {
      // Récupérer l’index de l’élément sous lequel se trouve le curseur de la souris
      rowIndexFromMouseDown = dataGridView1.HitTest(e.X, e.Y).RowIndex;
     
      if (rowIndexFromMouseDown != -1)
      {
        // Mémoriser le point ou l’évènement ‘mouse down’ a eu place
        Size dragSize = SystemInformation.DragSize;
     
        dragBoxFromMouseDown = new Rectangle(new Point(e.X - (dragSize.Width / 2),
                                e.Y - (dragSize.Height / 2)),
                                     dragSize);
      }
      else
        dragBoxFromMouseDown = Rectangle.Empty;
    }
     
    private void dataGridView1_DragOver(object sender, DragEventArgs e)
    {
      e.Effect = DragDropEffects.Move;
    }
     
    private void dataGridView1_DragDrop(object sender, DragEventArgs e)
    {
      // les coordonnes de la souris sont relatives a l’ecran, donc ils doivent
      // etre converties aux coordonnees client
      Point clientPoint = dataGridView1.PointToClient(new Point(e.X, e.Y));
     
      // Recuperer l’index de la ligne sous laquelle se trouve la souris
      rowIndexOfItemUnderMouseToDrop =
        dataGridView1.HitTest(clientPoint.X, clientPoint.Y).RowIndex;
     
      if (e.Effect== DragDropEffects.Move)
      {
        DataGridViewRow rowToMove = e.Data.GetData(
                  typeof(DataGridViewRow)) as DataGridViewRow;
        dataGridView1.Rows.RemoveAt(rowIndexFromMouseDown);
        dataGridView1.Rows.Insert(rowIndexOfItemUnderMouseToDrop, rowToMove);
     
      }
    }

     

     

    Pour plusieurs questions sur la bibliothèque de classes .NET, visitez Foire aux Questions  -  Bibliothèque de classes .NET Framework

     

    lundi 19 juillet 2010 14:49