You are on page 1of 17

Construir una Tabla

Como ejemplo, cree un nuevo proyecto (llmelo como guste), seleccione el objeto
DataGridView y pngalo en el formulario.



De forma predeterminada la tabla (DataGridView) mostrar barras de
desplazamiento cuando sea necesario (ScroUBars igual a Both). A continuacin,
aada al formulario los controles indicados a continuacin con las propiedades
especificadas:

La propiedad AllowUserToOrderColumns permite cambiar el orden de las
columnas. Para mover una columna, pulse la tecla Alt y arrstrela con el ratn a la
posicin deseada. AutoSizeColumnsMode indica cmo se determina la
anchura de las columnas. AutoSizeRowsMode indica cmo se determina la
altura de filas. ColumnHeadersHeightSizeMode indica si la altura de la fila que
contiene la cabecera de la columna es ajustable y si puede ser ajustada por el
usuario o ajusta automticamente. Dock indica a qu lados del contenedor se
ajustar La tabla. RowHeadersWidthSizeMode indica si la anchura de la
columna que contiene la cabecera de la fila es ajustable y si puede ser ajustada
por el usuario o se ajusta automticamente.

Al terminar de modificar las propiedades se obtendr lo siguiente:



El siguiente paso ser agregar las columnas a la tabla, para este ejemplo se agregaran las
columnas: Nombre, Direccin, Telfono y si est casado o no la persona. Para agregar
la columna se da clic derecho en la tabla y se selecciona la opcin Edit Columns.


Aparecer este cuadro:


Presione Add y aparecer esta otra ventana:



Aada la columna y aparecer esta pantalla:

Cambie el Header Text a Nombre y dentro de la seccin de desing ponga como
nombre colNombre, no cambie ninguna otra propiedad. Agregue las dems columnas
de la misma forma, tendr algo as al finalizar.

Ahora viene lo ms importante: llenar la tabla.
Dale doble clic en la forma y coloca el siguiente cdigo:
AsignarDatosTabla();
Este mtodo se encargara de hacer el trabajo de llenar la tabla, el cdigo del mtodo es
el siguiente:
private void AsignarDatosTabla()
{
// Crear cada fila de datos
object[] fila0 = { "Alfons Gonzlez Prez",
"Argentona, Barcelona", "933333333", true };
object[] fila1 = { "Ana Mara Cuesta Suer", "Gijn,
Asturias", "984454545", false };
object[] fila2 = { "Elena Veiguela Surez",
"Pontevedra", "986678678", false };
object[] fila3 = { "Pedro Aguado Rodrguez",
"Madrid", "912804574", true };
// Aadir las filas a la tabla
TablaTfnos.Rows.Add(fila0);
TablaTfnos.Rows.Add(fila1);
TablaTfnos.Rows.Add(fila2);
TablaTfnos.Rows.Add(fila3);
}


Si se corre el programa se dar cuenta que en la columna Casado solo aparece true o
false, podemos cambiar esto a checkboxes al ir otra vez a editar columnas y en la
columna de Casado cambiar el tipo de la columna a DataGridViewCheckBoxColumn.

Puede que se lance una excepcin al ejecutar el programa, esto se debe a que que
cuando se aade la ltima fila, la que est vaca (obsrvese que est habilitada la opcin de
aadir filas: propiedad AJlowlIserToAddRows = true), la columna "Casado" tiene un valor null
que no puede convertirse a false. Esta excepcin se captura aadiendo el controlador para d
evento DataError del DataGridView con el fin de, en el caso comentado, asignar a la
columna "Casado" el valor false:


Haga doble clic y agregue el siguiente cdigo:
if (TablaTfnos.Columns[e.ColumnIndex].Name == "colCasado")
{
if (TablaTfnos.Rows[e.RowIndex].Cells["colCasado"].Value
== null)
TablaTfnos.Rows[e.RowIndex].Cells["colCasado"].Value =
false;
}

Por ultimo si se quiere que al seleccionar un dato de la tabla se depsliege en otro cuadro
de texto su valor se hace lo siguiente, en los eventos de la tabla se hace doble clic al
evento: CellClic y se agrega el siguiente cdigo:
object valorCelda = TablaTfnos.CurrentCell.Value;
if (valorCelda != null)
MessageBox.Show(valorCelda.ToString());

De resultado tendr algo as:

Construir un rbol
Cree un nuevo proyecto (llmele como quiera) y seleccione el objeto Treeview y
agrguelo al formulario:

Se ver algo as:


Ahora se le cambia el nombre al Treeview a ArbolTfnos.


Lo siguiente es poner a la propiedad Dock el atributo Fill, despus se tiene que agregar
nodos al rbol, esto es relativamente fcil, se necesita usar la propiedad Node del
Treview. Aparecer la siguiente pantalla:


Se agregara nodos (padre e Hijos) para representar la siguiente imagen:


Una vez terminado quedara algo asi:

Ahora nos hace falta agregar imgenes a cada nodo, esto se hace agregando el objeto
ImageList, el cual llamaremos ImagsNodos:


Despus nos iremos a las propiedades del ImageList y seleccionaremos la propiedad
Images y aparecer la siguiente ventana:

Pero antes de aadir las imgenes se tienen que agregar en el folder del proyecto una
carpeta que contenga dichas imgenes.


Ahora simplemente vaya a la propiedad ImageList del Treeview y seleccione a
ImagsNodos:


Con esto terminara el rbol, ejectelo y se ver as:


Ahora lo que podemos hacer es agregar datos a los nodos y poder desplegarlos, para esto se debe incluir
otra clase a la cual se llamara Tfno la cual se derivara del TreeNode.
Esta clase tendr el siguiente cdigo:
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;


namespace Arbol
{
public class Tfno : TreeNode
{
internal string nombre;
private string direccin;
private long telfono;
private bool casado;

// Constructor: crea un nuevo objeto Tfno con los parmetros:
// nombre, direccin, telfono, casado
public Tfno(string nom, string dir, long tfno, bool cas)
{
nombre = nom;
direccin = dir;
telfono = tfno;
casado = cas;
}

// Constructor: crea un nuevo objeto Tfno con los parmetros:
// nombre, direccin, telfono, casado, etiqueta, ndice imagen
// nodo no seleccionado, ndice imagen nodo seleccionado
public Tfno(string nom, string dir, long tfno, bool cas, string etiq, int img0,
int img1)
: base(etiq, img0, img1)
{
nombre = nom;
direccin = dir;
telfono = tfno;
casado = cas;
}

public override string ToString()
{
return nombre;
}

public string datosTfno()
{
string NL = Environment.NewLine;
string estado;
if (casado)
{
estado = "casado/a";
}
else
{
estado = "soltero/a";
}
return nombre + NL + direccin + NL + telfono + NL + estado + NL;
}
}
}


Esta clase nos permitir desplegar la informacin de los nodos pero aun falta crear dichos nodos con la
informacin deseada, lo siguiente es crear el mtodo crearNodo y mandarlo a llamar en la forma.
El mtodo tendr el siguiente cdigo:

private void CrearNodos()
{
TreeNode nodoRaiz = ArbolTfnos.Nodes[0];
TreeNode nodoCategoria = null; // nodo de bifurcacin
TreeNode nodoLetra = null; // nodo de bifurcacin
Tfno nodoTelefono = null; // nodo hoja

nodoCategoria = new TreeNode("Amigos", 0, 1);
nodoRaiz.Nodes.Add(nodoCategoria);

nodoLetra = new TreeNode("A", 0, 1);
nodoTelefono = new Tfno("Alfons", "Barcelona", 933333333, true, "Alfons", 0, 1);
nodoLetra.Nodes.Add(nodoTelefono);
nodoTelefono = new Tfno("Ana", "Pontevedra", 986666666, true, "Ana", 0, 1);
nodoLetra.Nodes.Add(nodoTelefono);
nodoCategoria.Nodes.Add(nodoLetra);

nodoLetra = new TreeNode("B", 0, 1);
nodoTelefono = new Tfno("Beatriz", "Santander", 942222222, false, "Beatriz", 0, 1);
nodoLetra.Nodes.Add(nodoTelefono);
nodoCategoria.Nodes.Add(nodoLetra);

nodoCategoria = new TreeNode("Clientes", 0, 1);
nodoRaiz.Nodes.Add(nodoCategoria);

nodoLetra = new TreeNode("A", 0, 1);
nodoTelefono = new Tfno("Antonio", "Granada", 956666666, true, "Antonio", 0, 1);
nodoLetra.Nodes.Add(nodoTelefono);
nodoCategoria.Nodes.Add(nodoLetra);
}

Antes de correrlo se necesita una modificacin, entre a la propiedad Node del Treview y borre todos los
nodos y solo cree un nodo raz llamado Telefonos:

Al correrlo se tendr esto:

Ahora se ahara que al seleccionar un nodo se pueda ver la informacin que contenga, para hacer esto se
modificara el evento AfterSelect del Treeview. Se le hara doble clic y se la pondr el siguiente cdigo:
private void ArbolTfnos_AfterSelect(object sender, TreeViewEventArgs e)
{
if (e.Node.GetType().Equals(Type.GetType("Arbol.Tfno")))
{
Tfno nodo = (Tfno)e.Node;
MessageBox.Show(nodo.datosTfno(), "Datos", MessageBoxButtons.OK,
MessageBoxIcon.Information);
}
}

El resultado ser el siguiente:

Tambin hay mtodos recursivos para mostrar los nodos y el rbol los cuales son los siguientes:
private void MostrarArbol(TreeView arbol)
{
foreach (TreeNode unNodo in arbol.Nodes)
MostrarNodo(unNodo);
}

private void MostrarNodo(TreeNode nodo)
{
//System.Diagnostics.Debug.WriteLine(nodo.Text);
MessageBox.Show(nodo.Text);
foreach (TreeNode unNodo in nodo.Nodes)
MostrarNodo(unNodo);
}

You might also like