2

複数のグリッドビューを作成したい。そして、コードビハインド(.cs)ファイルからそれらを追加したいと思います。これがほとんど機能している私のコードです。しかし、誰かがこれの問題を見つけることができますか?

sample.aspx:

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

Sample.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

Sample.aspx:

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

Sample.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が編集可能になると、ポストバックごとにユーザーの変更が失われます。(ユーザビリティ/機能の中断)
  • ビューステートには保持されず、ページのポストバックごとにグリッドを再構築する必要があります。(パフォーマンスの問題)

より安全なアプローチは、ページにasp:Panel(GridViewPlaceHolderPanelと呼びます)を追加することです。Pag​​e_Initイベントでは、コードビハインドでGridViewをビルドし、を使用して追加します。

GridViewPlaceHolderPanel.Controls.Add(gv);

ただし、私がリストした2つの問題が問題ではない場合(編集可能ではなく、すべてのポストバックで構築する必要がある場合)、アプローチは正常に機能するはずです。

于 2012-08-28T13:20:51.947 に答える