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
{
    margin: 0;
    padding: 0;
}
.modal
{
    position: fixed;
    z-index: 999;
    height: 100%;
    width: 100%;
    top: 0;
    background-color: Black;
    filter: alpha(opacity=60);
    opacity: 0.6;
    -moz-opacity: 0.8;
}
.center
{
    z-index: 1000;
    margin: 300px auto;
    padding: 10px;
    width: 130px;
    background-color: White;
    border-radius: 10px;
    filter: alpha(opacity=100);
    opacity: 1;
    -moz-opacity: 1;
}
.center img
{
    height: 128px;
    width: 128px;
}
</style>