2009年11月16日 星期一

ASP.NET C#如何動態產生GridView控制項與資料列

在這裡,我們想要傳入一個DataTable,然後動態產生一個GridView,並且設定各種CSS給這個GridView。

步驟一:

首先我們可以在網頁上這樣描述,先設定一個Label,用來顯示發生錯誤時的訊息。接下來建立一個Panel,這個Panel就是等一下動態產生出來的GridView要擺放的位置:

<asp:Label ID="lbl_ErrMsg" runat="server" />
<asp:Panel ID="pnl_data" runat="server" />

步驟二:

我們建立一個method,並自外部傳入一個DataTable當作GridView的資料來源

protected void CreateGridView(DataTable dt)
{
    try
    {
        if (dt.Rows.Count > 0)
        {
            //產生一個GridView
            GridView gv = new GridView();
            gv.ID = dt.TableName;
            gv.AllowPaging = false;
            gv.AllowSorting = true;
            //先設定不要自動產生GridView中的每一欄
            gv.AutoGenerateColumns = false;
            gv.Style.Add("width", "100%");
            //動態設定每一欄型態、欄名與格式化,並將DataTable的資料
            自動對應每一欄中
            foreach (DataColumn c in dt.Columns)
            {
                BoundField bf = new BoundField();
                bf.DataField = c.ColumnName;
                bf.HeaderText = c.ColumnName;
                bf.HeaderStyle.CssClass = "StyleHead";
                bf.ItemStyle.CssClass = "StyleItem";
                gv.Columns.Add(bf);
            }
            //設定列的格式
            gv.FooterStyle.CssClass = "StyleFooter";
            gv.RowStyle.CssClass = "StyleRow";
            gv.PagerStyle.CssClass = "StylePageNo";
            gv.SelectedRowStyle.CssClass = "StyleSelectedRow";
            gv.HeaderStyle.CssClass = "StyleHead";
            gv.EditRowStyle.CssClass = "StyleEditRow";
            gv.AlternatingRowStyle.CssClass = "StyleAlternatingRow";
            gv.Visible = true;
            //將DataSource指向DataTable
            gv.DataSource = dt;
            gv.DataBind();
            gv.PageIndex = 0;
            //將產生出來的GridView放置到網頁的Panel內
            pnl_data.Controls.Add(gv);
        }
    }
    catch (Exception ex)
    {
        lbl_ErrMsg.Text = ex.Message;
    }
}

步驟三:

這樣就大功告成了。

沒有留言:

張貼留言