Tema: TreeView
Ver Mensaje Individual
  #3 (permalink)  
Antiguo 02/07/2009, 14:53
Avatar de dwaks
dwaks
 
Fecha de Ingreso: agosto-2002
Ubicación: Panamá
Mensajes: 962
Antigüedad: 21 años, 9 meses
Puntos: 15
Respuesta: TreeView

Para no matar la base de datos te cargas todo dentro de un DataTable despues desde allí sacas todo basado en el ParentID con un método recursivo.

Te dejo este código para que cojas idea de que quiero decir.

public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)
{
dt.Columns.Add("CategoriaID", typeof(int));
dt.Columns.Add("Nombre", typeof(string));
dt.Columns.Add("ParentID", typeof(int));

dt.Rows.Add(new object[] { 1, "Productos", 0 });
dt.Rows.Add(new object[] { 2, "TV LCD", 1 });
dt.Rows.Add(new object[] { 3, "XBOX", 1 });
dt.Rows.Add(new object[] { 4, "PS3", 1 });
dt.Rows.Add(new object[] { 5, "Servicios", 0 });
dt.Rows.Add(new object[] { 6, "Internet", 5 });
dt.Rows.Add(new object[] { 7, "Casa", 6 });
dt.Rows.Add(new object[] { 8, "Oficina", 6 });

CreateTreeView(dt);
}

private DataTable dt = new DataTable();

private void CreateTreeView(DataTable dt)
{
if (dt.Rows.Count > 0)
{
DataRow[] rows = dt.Select("ParentID = 0");

if (rows.Length > 0)
{
foreach (DataRow dr in rows)
{
int CategoriaID = (int)dr["CategoriaID"];
string Nombre = dr["Nombre"].ToString();

TreeNode node = new TreeNode(Nombre);
node.Tag = CategoriaID;

CreateChildRecursive(node);
this.treeView1.Nodes.Add(node);
}
}
}
}

private void CreateChildRecursive(TreeNode ParentNode)
{
DataRow[] rows = dt.Select("ParentID = " + ParentNode.Tag.ToString());

if (rows.Length > 0)
{
foreach (DataRow dr in rows)
{
int CategoriaID = (int)dr["CategoriaID"];
string Nombre = dr["Nombre"].ToString();

TreeNode node = new TreeNode(Nombre);
node.Tag = CategoriaID;

CreateChildRecursive(node);
ParentNode.Nodes.Add(node);
}
}
}
}