Muchas gracias por la ayuda
He logrado hacer el arbol de la siguiente manera:
- Tengo cinco tablas, 1 se llama SACP_CAUSA para registrar causas principales y sus campos son id_SACP (FK), ID_CAUSA (FK) e ID_SUBTIPO(FK) (Subtipo de la Causa); 1 se llama CAUSAS donde vienen las causas en sí; 1 tabla llamada CAUSAP_CAUSAS con campos ID_CAUSAP (FK)(Causa padre) e ID_CAUSAS (FK) (Causas pertenecientes a otras); 1 tabla donde especifico el SUBTIPO de Causa con campos ID_SUBTIPO, NOM_SUBTIPO (nombre del subtipo), ID_TIPO (FK); 1 tabla TIPO que contiene ID_TIPO,NOM_TIPO
- Digamos en resumen que lo que hace el método es: primero agregar un nodo Raíz llamado CAUSA, llama al metodo agregarNodos pasando la colección de nodos actual (el nodo CAUSA) y la cadena "tipo" para indicar que quiero insertar tipos. Al nodo CAUSA se agregan 5 nodos que son los 5 elementos de la tabla TIPO, al terminar, el método se llama a sí mismo con la colección de 5 nodos y el string "subtipo", y este al terminar se llama a sí mismo con la ultima colección de nodos y el string "CausaPrincipal", para llamarse al final y hasta llenar toodos los nodos de "causas" de "causas" colocando una colección de nodos de Causas y el string "CausaSecundaria", llamandose a si mismo en su interior.
- Me bajé los controles de IExplorer del link arriba puesto y coloque un control de Treeview en mi page llamado TreeView1.
- En Page_Load llamo al método LlenarTree2() que es el siguiente:
#region LLENAR ARBOL
public void LlenarTree2()
{
TreeView1.Nodes.Clear();
TreeView1.Nodes.Add(new Microsoft.Web.UI.WebControls.TreeNode());
TreeView1.Nodes[0].Text = "<strong>CAUSAS</strong>";
TreeView1.Nodes[0].Expanded = true;
agregarNodos("Tipo",TreeView1.Nodes);
}
public void agregarNodos(string TipoIns,Microsoft.Web.UI.WebControls.TreeNodeCollection Nodos)
{
DataTable nTable = new DataTable();
switch (TipoIns)
{
case "Tipo":
{
Base.TIPOCAUSA tipoc = new SGI_Intranet2.Base.TIPOCAUSA();
nTable = tipoc.GetTipoCausaVerTodos();
for(int i = 0;i<nTable.Rows.Count;i++)
{
Nodos[0].Nodes.Add(new Microsoft.Web.UI.WebControls.TreeNode());
Nodos[0].Nodes
.Text = "<strong>" + nTable.Rows.ItemArray[1].ToString() + "</strong>";
Nodos[0].Nodes.NodeData = nTable.Rows.ItemArray[0].ToString();
}
agregarNodos("SubTipo",Nodos[0].Nodes);
break;
}
case "SubTipo":
{
int id_tipo;
Base.TIPOCAUSA tipoc = new SGI_Intranet2.Base.TIPOCAUSA();
for(int i=0;i<Nodos.Count;i++)
{
id_tipo = Convert.ToInt32(Nodos.NodeData);
nTable = tipoc.GetSubtipoCausaVerdeTipo(id_tipo);
for (int j = 0; j < nTable.Rows.Count;j++)
{
Nodos.Nodes.Add(new Microsoft.Web.UI.WebControls.TreeNode());
Nodos.Nodes[j].Text = "<strong>" + nTable.Rows[j].ItemArray[2].ToString() + "</strong>";
Nodos.Nodes[j].NodeData = nTable.Rows[j].ItemArray[0].ToString();
}
agregarNodos("CausaPrincipal",Nodos.Nodes);
}
break;
}
case "CausaPrincipal":
{
Base.CAUSA causa = new SGI_Intranet2.Base.CAUSA();
for(int i=0;i<Nodos.Count;i++)
{
nTable = causa.GetCausaPrincipalPorSubtipo(id_sacp.ToString(),Nodos.NodeData);
for (int j = 0; j < nTable.Rows.Count;j++)
{
Nodos.Nodes.Add(new Microsoft.Web.UI.WebControls.TreeNode());
Nodos.Nodes[j].Text = ResumenDescripcion(nTable.Rows[j].ItemArray[1].ToString());
Nodos.Nodes[j].NodeData = nTable.Rows[j].ItemArray[0].ToString();
Nodos.Nodes[j].NavigateUrl = "causa-detalle.aspx?id_causa=" + Nodos.Nodes[j].NodeData;
}
agregarNodos("CausaSecundaria",Nodos.Nodes);
}
break;
}
case "CausaSecundaria":
{
Base.CAUSA causa = new SGI_Intranet2.Base.CAUSA();
if (Nodos.Count != 0)
{
for(int i=0;i<Nodos.Count;i++)
{
nTable = causa.GetCausaPorCausa(Nodos.NodeData);
for (int j = 0; j < nTable.Rows.Count;j++)
{
Nodos.Nodes.Add(new Microsoft.Web.UI.WebControls.TreeNode());
Nodos.Nodes[j].Text = ResumenDescripcion(nTable.Rows[j].ItemArray[1].ToString());
Nodos.Nodes[j].NodeData = nTable.Rows[j].ItemArray[0].ToString();
Nodos.Nodes[j].NavigateUrl = "causa-detalle.aspx?id_causa=" + Nodos.Nodes[j].NodeData;
}
agregarNodos("CausaSecundaria",Nodos.Nodes);
}
}
break;
}
}
}
#endregion
Con esto logro llenar el arbol y logro ponerle la dirección dinámica a cada nodo.
Lo único malo es que no puedo colocar el texto como para que entre en un espacio reducido, así que tengo que utilizar un método para reducir el texto y ponerle tres puntos suspensivos al final. Si alguien sabe como hacer para que se vea más nice, le agradecería la respuesta