.Net C# Conectarse a Base de Datos Oracle
24/11/2010C# .Net Ejecutable .exe con parámetros
28/11/2010Copio aquí un ejemplo de cómo se realiza un Drag and Drop en C# extraido del blog de Alejandro Gozalves bastante didáctico.
Para consultar el artículo original, click sobre el título
Artículo : Implementación Simple de Drag & Drop en C# y VB.Net
La implementación de Drag & Drop en aplicaciones windows, con .Net, es una secuencia de eventos y propiedades que casi nunca varía.
Para ilustrar el proceso, he preparado un ejemplo de una aplicación windows, del que pueden bajar el código en C#, o el código en VBNet.
Fig. 1 – Interface de la aplicación para Drag&Drop desde la lista a la Grilla.
Esta aplicación accede a una base de datos (Northwind de MSDE o SQLServer) y extrae una lista de Empleados (tabla Employee). Se permitirá “arrastrar” (Drag) el apellido del Empleado hacia una caja de texto y hacia una grilla de datos.
El objetivo es verificar, en el caso del textbox, el índice del item seleccionado y, en el caso de la grilla, desplegar los detalles del empleado seleccionado.
El conjunto de pasos a implementar es :
Para el TextBox
Paso Uno:
Poner en true la propiedad AllowDrop del TextBox. Esto habilitará la acción de soltar el ratón hacia este control.
Paso Dos:
Trabajar sobre el evento MouseDown del ListBox (es el evento que inicia el proceso de arrastre) y llamar el método DoDragDrop :
DoDragDrop(this.listBox1.SelectedIndex.ToString(), DragDropEffects.Copy);
Este método recibe como primer parámetro el elemento que se está arrastrando (para el caso nuestro el índice del elemento seleccionado en el ListBox) y, como segundo parámetro, el efecto que se producirá en el proceso de arrastre (pueden ser: Copy, Move, None, Link o Scroll).
Paso Tres:
Sobre el TexBox, en su evento DragEnter establecemos, con la siguiente línea, que el ícono que se deberá presentar, en este caso el de copia de contenido.
e.Effect = DragDropEffects.Copy;
Paso Cuatro:
Por último, para el evento DragDrop de TextBox tendremos, ahora si, la asignación del contenido seleccionado cuando se suelte el ratón (Drop).
this.textBox1.Text = e.Data.GetData(DataFormats.Text).ToString();
Listo. Para el gridview es un contexto similar.
En el evento DragEnter de DataGrid ponemos lo siguiente :
if (e.Data.GetDataPresent(DataFormats.Text)) e.Effect = DragDropEffects.Copy; else e.Effect = DragDropEffects.None;
y en el evento DragDrop del mismo control :
int indiceListbox = 1 + int.Parse(e.Data.GetData(DataFormats.Text).ToString()); //refresca el datagrid this.dataGrid1.DataSource = null; DataSet ds = new DataSet(); SqlCommand com = new SqlCommand(); com.CommandText = "SELECT * FROM Employees WHERE EmployeeId = @ID"; com.CommandType = CommandType.Text; com.Connection = conn; com.Parameters.Add("@ID",SqlDbType.Int); com.Parameters["@ID"].Value = indiceListbox; SqlDataAdapter da = new SqlDataAdapter(); da.SelectCommand = com; da.Fill(ds); this.dataGrid1.DataSource = ds.Tables[0].DefaultView;
con eso, el control llenará los datos para el item seleccionado en la lista.
Esta sucesión de 4 pasos es la que habitualmente se sigue para el proceso de Drag & Drop. Puede implementarse, por ejemplo, un efecto “Move” en lugar de “Copy”, donde habría que incluir un paso adicional para quitar el elemento seleccionado del ListBox.
Eso, para hacerlo un tanto más interesante, lo dejo como tarea para el lector… 🙂
Espero sea útil.