0

ボタンのクリックで動的な画像を生成し、パネルにドラッグする必要があります。

画像を追加するパネルも、ボタンをクリックするだけで動的に作成されます。問題は、別のボタンをクリックすると、画像を追加する (動的に画像を追加するために使用される) というボタンをクリックすると、追加されたパネルが非表示になることです。そして、パネルの追加ボタンをクリックすると、以前に追加されたパネルと新しいパネルが表示されます。

これはポストバックか何かのせいですか?

ここに私のC#コードがあります:

private void addRow1()
{
    for (int i = 0; i < row_cnt; i++)
    {
        var row = new TableRow();
        var cell = new TableCell();
        var tbl = new Table();
        cell.Height = Unit.Pixel(100);
        cell.Width = Unit.Percentage(100);
        var pnl1 = new Panel();
        pnl1.ID = "Panel" + i;
        pnl1.Width = Unit.Percentage(800);
        pnl1.Height = Unit.Percentage(100);
        pnl1.BackColor = Color.FromArgb(255, 231, 229, 246);
        pnl1.Visible = true;
        pnl1.BorderStyle = BorderStyle.Solid;
        pnl1.BorderWidth = Unit.Pixel(2);
        cell.Controls.Add(pnl1);
        row.Cells.Add(cell);
        TableMain.Rows.Add(row);
        pnl1.Controls.Add(tbl);
        tbl.ID = "tbl" + (i + 1);
        tbl.BorderStyle = BorderStyle.Solid;
        tbl.Width = Unit.Percentage(100);
        tbl.BorderWidth = Unit.Pixel(1);
        var tbl_row = new TableRow();
        var tbl_cell = new TableCell();
        tbl_cell.Height = Unit.Pixel(90);
        tbl_cell.Width = Unit.Pixel(20);
        tbl_cell.BorderStyle = BorderStyle.Solid;
        tbl_cell.BorderWidth = Unit.Pixel(2);
        tbl_row.Cells.Add(tbl_cell);
        tbl.Rows.Add(tbl_row);
    }
}

HTML は次のとおりです。

<body>
    <form id="form1" runat="server">
        <div id="div" runat="server" style="width: 1000px; height: 500px; background-color:lightgoldenrodyellow ">
            <asp:Button ID="Button1" runat="server" Text="ADD SLAB" OnClick="Button1Click" />
            <asp:Button ID="Button2" runat="server" Text="ADD IMAGE" OnClick="Button2Click" />
            <asp:Table ID="TableMain" runat="server" Border="0">
            </asp:Table>
        </div>
    </form>
</body>
4

1 に答える 1

0

コントロールを動的に作成しているため、ポストバックごとにコントロールを追加する必要があります。

コードでは、テーブルに行とセルを追加するときに、以前に存在していたものを保存しません... コントロールを ViewState に追加する必要があります。ドキュメントから:

ビュー ステートの本来の目的は単純です。ポストバック間で状態を保持するためです。(ASP.NET Web ページの場合、その状態は、そのコントロール階層を構成するコントロールのプロパティ値です。)

ViewState の理解とその使用方法については、この MSDN の記事を参照してください。

于 2012-10-30T12:26:17.237 に答える