Hola!
Tengo un treeview definido para carga de nodos sobre demanda, lo que hace es ir cargando bajo demanda directorios y archivos que cuelgan de uno base, mediante la propiedad onTreeNodePopulate los cargo según se expande el árbol, el código es el siguiente:
ASP:
<asp:UpdatePanel ID="treePanel" runat="server" UpdateMode="Conditional" ><ContentTemplate>
<asp:treeview ID="tree" runat="server" ExpandDepth="0" OnTreeNodePopulate="Treeview1_TreeNodePopulate" ShowCheckBoxes="All" ShowLines="true" Enabled="true" Visible="true" EnableClientScript="true"/>
</ContentTemplate></asp:UpdatePanel>
C#:
protected void Treeview1_TreeNodePopulate(object sender, TreeNodeEventArgs e)
{
if (e.Node.ChildNodes.Count == 0)
{
LoadChildNode(e.Node);
}
treePanel.Update();
}
protected void LoadChildNode(System.Web.UI.WebControls.TreeNode node)
{
DirectoryInfo directory = new DirectoryInfo(node.Value);
foreach (DirectoryInfo sub in directory.GetDirectories())
{
System.Web.UI.WebControls.TreeNode subNode = new System.Web.UI.WebControls.TreeNode(sub.Name);
subNode.Value = sub.FullName;
if (sub.GetDirectories().Length > 0 || sub.GetFiles().Length > 0)
{
subNode.SelectAction = TreeNodeSelectAction.SelectExpand;
subNode.PopulateOnDemand = true;
}
subNode.NavigateUrl = "#";
subNode.ShowCheckBox = true;
tree.Nodes.Add(subNode);
node.ChildNodes.Add(subNode);
}
foreach (FileInfo fi in directory.GetFiles())
{
System.Web.UI.WebControls.TreeNode subNode = new System.Web.UI.WebControls.TreeNode(fi.Name);
subNode.Value = fi.FullName;
subNode.ShowCheckBox = true;
subNode.NavigateUrl = "#";
subNode.PopulateOnDemand = false;
node.ChildNodes.Add(subNode);
}
tree.ShowCheckBoxes = TreeNodeTypes.All;
treePanel.Update();
}
Hasta aquí todo perfecto, el problema viene cuando expando bastantes nodos y quiero hacer alguna operación con el árbol, por ejemplo limpiar los nodos que estén marcados, lo hago con el siguiente código:
for (int i = tree.CheckedNodes.Count-1; i >=0 ;i-- )
{
tree.CheckedNodes[i].Checked = false;
}
treePanel.Update();
Cuando expando muchos nodos y hago postback, me guarda la información del árbol en la url, ésta se hace demasiado larga para el navegador
y da un error, esto creo que lo hace porque lo guarda en el viewstate, estuve mirando e investigando y no fui capaz de hacer que funcionase. ¿Alguien sabe como hacer que no pase los datos en la url o como solucionar esto? Muchas gracias de antemano.