Introducción
En este articulo tratare de mostrar como se hace uso de ListView de manera que se puedan visualizar los registros, y manipularlos, en este caso se editara individualmente un ítem de la lista, y se trabajara mediante la el pasaje de la selección a otro ListView.
Algunas propiedades importante que se han usado en el ejemplo son
- View= Details, permite definir el layout de los ítem dentro del ListView, por tratarse de ítem con estilo de grilla, se usa el modo de detalle.
- FullRowSelect = True, esta propiedad permite que al seleccionar un ítem este sea se resalte a lo largo del registro
- HideSelection = False, cuando el control pierde el foco este mantiene un un control griseada la selección activa.
La creación de las columnas fue realizada en tiempo de diseño, para los cual se hizo uso las opciones mostradas en la siguiente imagen
Carga del ListView
El primer paso que se realizaría será la carga de los ítems dentro del control.
private void Form1_Load(object sender, EventArgs e) { DataTable dt = ObtenerDatos(); foreach (DataRow row in dt.Rows) { ListViewItem item = new ListViewItem(Convert.ToString(row["id"])); item.SubItems.Add(Convert.ToString(row["descripcion"])); item.SubItems.Add(Convert.ToString(row["precio"])); lswProductos.Items.Add(item); } }
A modo de ejemplo en este caso se ha usado como origen de dato un DataTable cargado manualmente desde código:
private DataTable ObtenerDatos() { DataTable dt = new DataTable(); dt.Columns.Add("Id"); dt.Columns.Add("descripcion"); dt.Columns.Add("precio"); DataRow row = dt.NewRow(); row["id"] = 1; row["descripcion"] = "Prod 1"; row["precio"] = 140; dt.Rows.Add(row); row = dt.NewRow(); row["id"] = 2; row["descripcion"] = "Prod 2"; row["precio"] = 30; dt.Rows.Add(row); row = dt.NewRow(); row["id"] = 3; row["descripcion"] = "Prod 3"; row["precio"] = 60; dt.Rows.Add(row); row = dt.NewRow(); row["id"] = 4; row["descripcion"] = "Prod 4"; row["precio"] = 110; dt.Rows.Add(row); return dt; }
En este caso por cada ítem del origen de datos se recorrer en un ciclo del foreach y se van creando los ListViewItem que definen cada registro.
A cada ítem del ListView se le definen sus SubItems que representaran las columnas.
Debe aclararse que la primer columna en el ListView es representada por el propio ListViewItem, es por eso que no hay un SubItem que represente la columna “Id”.
Pasaje de ítems entre ListView
Una de las acciones mas comunes es la selección de ítems para su posterior trabajo con estos datos.
Es por eso que en el ejemplo se veras dos botones que permitirán pasar los registros entre controles.
private void btnAgregar_Click(object sender, EventArgs e) { foreach(ListViewItem item in lswProductos.SelectedItems) { lswProductos.Items.Remove(item); lswProductosSeleccionados.Items.Add(item); } } private void btnQuitar_Click(object sender, EventArgs e) { foreach (ListViewItem item in lswProductosSeleccionados.SelectedItems) { lswProductosSeleccionados.Items.Remove(item); lswProductos.Items.Add(item); } }
Como se observa en cada caso las listas son recorridas en sus ítems seleccionados, procediendo a la eliminación del registro y su posterior agregado en la segunda lista.
Edición del ítem seleccionado
Algo que será raro encontrar en el ListView, es que este no posee un método claro para poder detectar cual es el registro o ítem actualmente seleccionado, todas las propiedades hacen referencia a un conjunto de registros.
private void lswProductos_MouseDoubleClick(object sender, MouseEventArgs e) { ListViewItem item = lswProductos.GetItemAt(e.X, e.Y); if (item != null) { txtId.Text = item.Text; txtDescripcion.Text = item.SubItems[1].Text; txtPrecio.Text = item.SubItems[2].Text; } }
El evento MouseDoubleClick posee en sus argumentos dos propiedades que especifican las coordenadas del cursor, las cuales combinadas a el método GetItemAt() permiten seleccionar que ítem se ha pulsado, y con este la edición del mismo
[C#]
|
[VB.NET]
|