mercoledì 5 dicembre 2012

Creazione e popolamento dati di una TreeView in una .aspx

In questo esempio è rappresentata la creazione di una TreeView e di un suo popolamento statico (ossia non da db o da file) in c#.
Nella prima parte viene indicato l'oggetto nella pagina, nella seconda il codice da integrare per il caricamento di esempio.

Parte da integrare nella pagina .aspx
<asp:TreeView ID="treeview_example" runat="server" Width="220" ShowCheckBoxes="Leaf">
 <DataBindings>
  <asp:TreeNodeBinding DataMember="siteMapNode" TextField="title" ValueField="resourceKey"
   SelectAction="None" />
 </DataBindings>
</asp:TreeView>
Codice da integrare nel file .aspx.cs
public partial class _Default : System.Web.UI.Page 
{
    protected void Page_Load(object sender, EventArgs e)
    {
        PopulateTreeView();
    }

    protected void PopulateTreeView()
    {
        DataTable dataTable = null;
        try
        {
            dataTable = new DataTable("dt");
            dataTable.Columns.Add(new DataColumn("value", typeof(int)));
            dataTable.Columns.Add(new DataColumn("area", typeof(string)));
            dataTable.Columns.Add(new DataColumn("type", typeof(string)));
            DataRow dataRow = dataTable.NewRow();
            dataRow = dataTable.NewRow();
            dataRow["value"] = "1";
            dataRow["area"] = "Example root";
            dataRow["type"] = "Check 1";
            dataTable.Rows.Add(dataRow);

            dataRow = dataTable.NewRow();
            dataRow["value"] = "2";
            dataRow["area"] = "";
            dataRow["type"] = "Check 2";
            dataTable.Rows.Add(dataRow);

            dataRow = dataTable.NewRow();
            dataRow["value"] = "3";
            dataRow["area"] = "";
            dataRow["type"] = "Check 3";
            dataTable.Rows.Add(dataRow);

            /*...*/

            TreeNode rootNode = new TreeNode();
            if ((dataTable != null) && (dataTable.Rows.Count != 0))
            {
                DataView dataView = new DataView(dataTable);
                foreach (DataRowView r in dataView)
                {
                    if ("" != (string)r["area"])
                        rootNode = AddNode("", (string)r[1].ToString(), "Folder", treeview_example.Nodes);

                    AddNode(r[0].ToString(), (string)r[2].ToString(), "Page", rootNode.ChildNodes);
                }
            }
            else
            {
                //...do something
            }
        }
        catch (Exception ex)
        {
            //log.Error(ex);
        }
        if (dataTable != null)
            dataTable.Dispose();
    }

    private TreeNode AddNode(string id, string text, string type, TreeNodeCollection nodeCollection)
    {
        TreeNode node = new TreeNode(id);
        node.Value = id;
        node.Text = text;
        nodeCollection.Add(node);
        return node;
    }
}
Output: