Blog

C# .Net Drag and Drop entre dos datagridviews (tutorial)

Posted by:

Voy a intentar explicar paso a paso, el procedimiento para realizar un Drag & Drop o como también se le suele llamar arrastrar y soltar,  arrastrar y pegar, drag and drop.

Personalmente he de decir que me ha costado entender todos los pasos necesarios, y por eso mismo intentaré explicar lo más detalladamente posible que hay que hacer y más importante, por qué hay que hacer según que cosas.

En la imagen podeis ver el objetivo del ejercicio, dos datagridviews y arrastrar el contenido de una celda a otra celda para copiar su valor.

No necesariamente tienen que tener el mismo índice, ni copiarse en la misma fila o misma columna.

Será preciso marcar diversos momentos dentro del proceso:

1- Pulsar el botón del mouse para entrar en la celda

2- Mover el mouse con el botón apretado

3-Proceso “dragdrop” o arrastrar desde el objeto origen hasta el de destino (aquí Datagridview1 a Datagridview2).

4-por último soltar el botón del ratón y finalizar el arrastre para copiar el valor.

Pasos previos:

Será preciso (imprescindible) indicar en el objeto destino la propiedad “AllowDrop=True

Vayamos paso a paso:

1- Pulsar el botón del mouse para entrar en la celda:

Aquí tendremos que guardar el valor que nos interese en una variable (en este caso un string)

Deberemos posicionar el ratón mediante HitTestInfo, lo que nos permitirá obtener en que fila y en que columna estamos.

Una vez localizada las coordenadas X e Y, obtendremos el valor de la celda y lo almacenaremos en la variable “valorcelda”.

finalmente ejecutaremos el método DoDragDrop del datagridview origen, donde como parámetros le pasamos el “valorcelda” o Data, y qué efectos queremos que haga el DragDrop (* importante debe coincidir el efecto tanto en origen como en destino).

C#:

  1. span style=”color: #808080;”>””// buscar fila bajo el Mouse
  2.  

2-Al mover el ratón deberemos verificar que el botón izquierdo está pulsado, así que tendremos que crear un evento al pulsar el ratón del mouse, y comprobando que el botón del mouse es el izquierdo activar los efectos del Drag&Drop mediante DoDragDrop.

C#:

  1.  

3-Proceso “dragdrop” o arrastrar desde el objeto origen hasta el de destino (aquí Datagridview1 a Datagridview2).

Aquí lo que hacemos es traspasar el valor que habíamos almacenado “ValorCelda” a la celda Destino. Lo hacemos mediante e.Data.GetData, y será preciso convertir el valor al tipo que nos interese (en este caso string)

Al igual que en el origen, mediante HitTest obtenemos la coordenada final donde soltaremos el valor, y mediante este punto obtendremos la fila y la columna destino.

Finalmente asignamos a la celda el valor obtenido.

C#:

  1. span style=”color: #008080; font-style: italic;”>// calcular ubicacion del Mouse en coordenadas relativas a la grilla
  2. // buscar fila bajo el Mouse
  3. “”;
  4.  
  5. }

4-por último soltar el botón del ratón y finalizar el arrastre para copiar el valor.

Aquí simplemente decimos que efecto queremos que haga el DragDrop (en este caso queremos que copie).

Recordad que el efecto tiene que ser el mismo que habíamos puesto en el origen.

C#:

  1.  

Os dejo aquí todo el código, podeis hacer un copiar y pegar tranquilamente:

Objetos necesarios:

  • Proyecto WindowsForms
  • Datagridview1
  • Datagridview2
C#:

  1. span style=”color: #808080;”>”COL1″, “COL1”);
  2. dataGridView1.Columns.Add(“COL2”, “COL2”);
  3. dataGridView1.Columns.Add(“COL3”, “COL3”);
  4. dataGridView1.Columns.Add(“COL4”, “COL4”);
  5. dataGridView1.Rows.Add();
  6. dataGridView1.Rows.Add();
  7. dataGridView2.Columns.Add(“COL1”, “COL1”);
  8. dataGridView2.Columns.Add(“COL2”, “COL2”);
  9. dataGridView2.Columns.Add(“COL3”, “COL3”);
  10. dataGridView2.Columns.Add(“COL4”, “COL4”“1”“11”“2”“22”“3”“33”“”// buscar fila bajo el Mouse
  11. //
  12. // calcular ubicacion del Mouse en coordenadas relativas a la grilla
  13. // buscar fila bajo el Mouse
  14. “”;
  15.  
  16. }
  17.  
  18. }
  19. }

2


About the Author:

Discussion

  1. miqqe°°  April 10, 2012

    pues he andado buscando un ejemplo de arrastrar y soltar pero necesito que sea de toda la fila, no lo he podido hacer 🙁 si me pudieras ayudar te lo agradecere mucho…

  2. lvgstark  April 11, 2012

    ¿has probado a cambiar los valores de celda por fila?
    En lugar de definir un string para almacenar el contenido de la celda, define una fila para almacenar el contenido de toda la fila.
    ahora está así:
    valorcelda = dataGridView1.Rows[info.RowIndex].Cells[info.ColumnIndex].Value.ToString();
    Sería buscar algo así:
    valordefila = dataGridView1.Rows[info.RowIndex]; (definiendo valordefila como una datagridview.row)

Add a Comment

UA-30641277-1