DataGridView jerarquico

08/03/2007 - 09:54 por xxaeiou | Informe spam
Hola,

me gustaria saber si algien a programado un DataGridView jerarquico.
Es decir, un DataGrid el la que se puede ver los datos con una cruz
delante y al cliquear la cruz, se abran nuevas filas. Mirar en esta
dirección para ver lo que quiero decir:
http://www.applicationaspect.com/Si...tures.aspx

Y si es posible, donde puedo encontrar información sobre como
programar?

Gracias con antelación.
 

Leer las respuestas

#1 Sergio E.
08/03/2007 - 16:04 | Informe spam
Hola, yo programe uno de esos y fue un show del terror, me tomo casi mes y
medio a 2 meses completarlo (fue mi primer encargo de algo programado en
asp.net, por cierto).

En lineas generales, te puedo platicar que pasos segui para esto, a ver si
te sirve como guia:

1.- Crear un Gridview vacio al cual
a) no establecerle ninguna propiedad de datasource ni datasourceid
b) definir "autogeneratecolumns"=false
c) insertar mediante el editor visual una columna de tipo botonimage mas
o menos asi
<asp:ButtonField ButtonType="Image"
CommandName="ExpandirArbol" InsertVisible="False"
ImageUrl="~/images/closed.JPG">
<ItemStyle Font-Size="X-Small" />
<HeaderStyle Wrap="True" />
</asp:ButtonField>
d) despues de esa columna, insertas ya las columnas que tendra tu
gridview, y defines como se llmaran las columnas de las que tomaran su valor
(propiedad datafield), mismas que corresponderan a los nombres de las
columnas en el datatable que se creara despues para meter el arbol
2.- en el evento page_load, pongo una llamada a un metodo que sera el que
realmente creará el árbol, misma que debera ejecutarse cada vez que la
pagina cargue, sea en postback o no.
3.- En el metodo creararbol() me traigo los datos a un datatable cuyas
columnas se llaman de la forma en que deberan leerse en el datafield de cada
columna del grid. Yo puse una columna extra para saber si es elemento
abierto o cerrado, y ademas me asegure de que los datos vengan ordenados en
el datatable tal y como se van a mostrar en el grid, luego asigno este
datatable como datasource del gridview y mando llamar al databind
4.- luego se generan los eventos del gridview
a) gv_rowdatabound. En este metodo calculo la identacion del elemento a
mostrar en base a los datos del renglon (nivel de produnfidad) y en base a
la columna que me dice que tipo de renglon es (si abierto o cerrado) cambio
la imagen del botonfield ExpandirArbol Esto se hace con:
if (e.Row.RowType == DataControlRowType.DataRow)
{
DataRowView drv = (DataRowView)e.Row.DataItem;
ImageButton col = (ImageButton)e.Row.Cells[0].Controls[0];
switch(drv["TipoRenglon"].tostring())
{
case "Abierto":
col.ImageUrl = "~/imagesclosed.JPG";
break;
case "Cerrado":
col.ImageUrl = "~/images/open.JPG";
break;
default:
//nada
break;
}
}
b) gv_rowcommand: En este metodo es donde se procesara la accion del
click en el boton que abre o cierra los nodos del arbol Mas o menos asi (te
pongo un switch pues yo tenia varios botones para otros comandos, pero solo
dejo lo de abrir/cerrar):
int rowIndex = Convert.ToInt32(e.CommandArgument,
CultureInfo.InvariantCulture);
switch (e.CommandName)
{
case "ExpandirArbol":
string cveNodo =
this.gvArbol.DataKeys[rowIndex].Values["Clave"].ToString();
this.ObtieneSubArbol(cveNodo, rowIndex); //por cierto, el
datatable lo voy llenando poco a poco, obteniendo de la bdd los hijos de un
elemento solo cuando este elemento es "abierto",por lo que el orden en el
datatable debo hacerlo en base a los campos y usando order by.
break;
default: // en otro caso nada.
break;
}
5.- en el metodo obtienesubarbol genero la consulta que me trae los
elementos nuevos y los añado al datatable del que obtiene sus datos el grid
y mando llamar de nuevo el databind de este para que se muestre.

Eso es groso modo el proceso que sigo, aunque en mi caso hago mas cosas pues
mi grid necesitaba algunas otras cosas.

Espero esto te sirva de inicio, pues yo estuve igual buscando mucho por la
red y no halle gran cosa, por lo que tuve que construirlo asi desde cero.

-
Saludos,
Sergio E.
Desarrollador 2* del programa MS-DCE2005
[P.d.] - [Vota por Chichén Itzá en www.new7wonders.com]


escribió en el mensaje
news:
Hola,

me gustaria saber si algien a programado un DataGridView jerarquico.
Es decir, un DataGrid el la que se puede ver los datos con una cruz
delante y al cliquear la cruz, se abran nuevas filas. Mirar en esta
dirección para ver lo que quiero decir:
http://www.applicationaspect.com/Si...tures.aspx

Y si es posible, donde puedo encontrar información sobre como
programar?

Gracias con antelación.

Preguntas similares