2

我想创建多个网格视图。我想从代码后面(.cs)文件中添加它们。这是我几乎可以工作的代码。但是任何人都可以找到这有什么问题吗?

示例.aspx:

    <body>
    <form id="form1" runat="server">
           <%CreateGridView();%>
    </form>
    </body>

示例.aspx.cs:

    using System;
    using System.Collections;
    using System.Web.UI;
    using System.Web.UI.WebControls;

    public partial class _Default : System.Web.UI.Page
    {
    protected void Page_Load(object sender, EventArgs e)
    {
    }

    protected GridView CreateGridView()
    {
    GridView gv = new GridView();
    gv.ID = "_gridview1";
    Queue q = new Queue();
    for (int i = 0; i < 20; i++)
        q.Enqueue(i);
    gv.DataSource = q;
    gv.DataBind();
    gv.Visible = true;
    return gv;
    }
    }
4

2 回答 2

6

示例.aspx:

<body>
    <form id="form1" runat="server">
        <asp:PlaceHolder id="ph" runat="server"/>
    </form>
</body>

示例.aspx.cs:

protected void Page_Load(object sender, EventArgs e)
{
    for (int i = 0; i < 20; i++)
    {
        GridView gv = new GridView();
        gv.ID = "_gridview" + i;
        Queue q = new Queue();
        q.Enqueue(i);
        gv.DataSource = q;
        gv.DataBind();
        ph.Controls.Add(gv);
    }
}
于 2012-08-28T13:20:30.997 回答
2

但是任何人都可以找到这有什么问题吗?

  • 如果 GridView 是可编辑的,您将丢失用户在每次回发时所做的更改。(可用性/功能中断)
  • 它不会持续到 Viewstate 并且需要在每个页面回发时重建网格。(性能问题)

一种更安全的方法可能是向页面添加一个 asp:Panel(你称之为 GridViewPlaceHolderPanel),然后在 Page_Init 事件中,在后面的代码中构建你的 GridView 并使用

GridViewPlaceHolderPanel.Controls.Add(gv);

但是,如果我列出的两个问题不是问题(它不可编辑,并且您希望在每次回发时都构建它),那么您的方法应该可以正常工作。

于 2012-08-28T13:20:51.947 回答