2016年12月16日 星期五

ASP.NET TreeView 的資料建立

首先要有一父子架構的資料表

Private void SetTree()
{
    // 取得有父子架構的資料
    DataTable dt = GetData("Select ID, Name, FatherID From MyTable");
    // 跑第一層迴圈建立根節點
    foreach (DataRow row in dt.Rows)
    {
           TreeNode root = new TreeNode(rows["ID"].ToString(), rows["Name"].ToString());
           AddChildNode(dt, root);
           TreeView1.Nodes.Add(root);
    }
}

// 跑遞迴建立子節點
Private void AddChildNode(DataTable dt, TreeNode node)
{
    DataRow[] Rows = dt.Select(string.Format("FatherID = {0}", node.Value));  
    if (rows.Count() > 0)
    {
        foreach (DataRow row in Rows)
        {
            TreeNode newNode = new TreeNode(row["ID"].ToString(), rows["Name"].ToString());
            node.ChildNodes.Add(newNode);
            AddChildNode(dt, newNode);
        }
    }
}

使用ASP.NET 的 AJAX 時,顯示 Loading 字樣

HTML 部份
<asp:ScriptManager runat="server">
</asp:ScriptManager>
<asp:UpdateProgress ID="UpdateProgress1" runat="server" AssociatedUpdatePanelID="UpdatePanel1">
<ProgressTemplate>
    <div class="modal">
        <div class="center">
            <img alt="" src="loader.gif" />
        </div>
    </div>
</ProgressTemplate>
</asp:UpdateProgress>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
    <asp:Button ID="Button1" Text="Submit" runat="server" OnClick="Button1_Click" />
</ContentTemplate>
</asp:UpdatePanel>

.CS 部份
仍然依照原先的寫法
protected void Button1_Click(object sender, EventArgs e)
{
    GetSomeData();
}

樣式的部份
<style type="text/css">
body
{
    margin0;
    padding0;
}
.modal
{
    positionfixed;
    z-index999;
    height100%;
    width100%;
    top0;
    background-colorBlack;
    filteralpha(opacity=60);
    opacity0.6;
    -moz-opacity0.8;
}
.center
{
    z-index1000;
    margin300px auto;
    padding10px;
    width130px;
    background-colorWhite;
    border-radius10px;
    filteralpha(opacity=100);
    opacity1;
    -moz-opacity1;
}
.center img
{
    height128px;
    width128px;
}
</style>