在asp.net c#4.0中完全以编程方式创建Gridview

在asp.net c#4.0中完全以编程方式创建Gridview,c#,asp.net,gridview,C#,Asp.net,Gridview,我想创建多个gridview。我想从代码隐藏(.cs)文件中添加它们。 这是我的代码,几乎可以工作了。但是有人能发现这有什么问题吗 sample.aspx: <body> <form id="form1" runat="server"> <%CreateGridView();%> </form> </body> using System; using System.

我想创建多个gridview。我想从代码隐藏(.cs)文件中添加它们。 这是我的代码,几乎可以工作了。但是有人能发现这有什么问题吗

sample.aspx:

    <body>
    <form id="form1" runat="server">
           <%CreateGridView();%>
    </form>
    </body>
    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;
    }
    }
<body>
    <form id="form1" runat="server">
        <asp:PlaceHolder id="ph" runat="server"/>
    </form>
</body>
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);
    }
}

Sample.aspx.cs:

    <body>
    <form id="form1" runat="server">
           <%CreateGridView();%>
    </form>
    </body>
    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;
    }
    }
<body>
    <form id="form1" runat="server">
        <asp:PlaceHolder id="ph" runat="server"/>
    </form>
</body>
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);
    }
}
使用系统;
使用系统集合;
使用System.Web.UI;
使用System.Web.UI.WebControl;
公共部分类\u默认值:System.Web.UI.Page
{
受保护的无效页面加载(对象发送方、事件参数e)
{
}
受保护的GridView CreateGridView()
{
GridView gv=新的GridView();
gv.ID=“_gridview1”;
队列q=新队列();
对于(int i=0;i<20;i++)
q、 排队(i);
gv.DataSource=q;
gv.DataBind();
gv.可见=真实;
返回gv;
}
}

示例。aspx:

    <body>
    <form id="form1" runat="server">
           <%CreateGridView();%>
    </form>
    </body>
    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;
    }
    }
<body>
    <form id="form1" runat="server">
        <asp:PlaceHolder id="ph" runat="server"/>
    </form>
</body>
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);
    }
}

Sample.aspx.cs:

    <body>
    <form id="form1" runat="server">
           <%CreateGridView();%>
    </form>
    </body>
    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;
    }
    }
<body>
    <form id="form1" runat="server">
        <asp:PlaceHolder id="ph" runat="server"/>
    </form>
</body>
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);
    }
}
受保护的无效页面加载(对象发送方,事件参数e)
{
对于(int i=0;i<20;i++)
{
GridView gv=新的GridView();
gv.ID=“_gridview”+i;
队列q=新队列();
q、 排队(i);
gv.DataSource=q;
gv.DataBind();
ph.对照品添加(gv);
}
}
但是有人能发现这有什么问题吗

  • 如果GridView是可编辑的,则每次回发时都会丢失用户的更改。(可用性/功能中断)
  • 它不会持续到Viewstate,并且需要在每个页面回发时重新构建网格。(性能问题)
更安全的方法可能是将asp:Panel(您称之为GridViewPlaceholder Panel)添加到页面,并在page_Init事件中,在代码隐藏中构建GridView并使用

GridViewPlaceholder面板.Controls.Add(gv)


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

更安全的方法在@JP Hellemons answerSwitch to MVC的代码中完美地显示出来。控件生成要容易得多。+1-这正是我所认为的“更安全的方法”,正如您在
页面_Init
中提到的@DavidStratton可能会更好!