0

page_load で構築されている動的テーブルがあります。

全ページのポストバックなしで行を動的に追加できるように、テーブルを更新パネル内に配置しました。各行には 4 つのセルがあり、最初の 3 つはテキスト ボックスを含み、4 番目のセルは行を削除する必要があるイメージ ボタンです。

ただし、行を削除するための画像ボタンはポスト バックされますが、イベント ハンドラ サブルーチンは起動されません。

ポストバックでリロードするために、テーブルをセッション変数に設定しました。

<%--Update Panel with Image Button to add row--%>
<asp:UpdatePanel ID="pnlHA" runat="server" UpdateMode="conditional" >
 <ContentTemplate>
    <asp:ImageButton ID="imgAddHA" AlternateText="Add Row" ImageUrl="../images/plus_orange.png" style="width:17px; height:17px; cursor: hand;" runat="server" />
    <div style="height:100px; overflow:scroll; overflow-x:hidden;">
        <span runat="server" id="spanTBL_HA" />
    </div>   
 </ContentTemplate>
</asp:UpdatePanel>

pnl ページがポストバックにある場合、page.init でスパンを再作成します。

    If pnlHA.Page.IsPostBack Then
        spanTBL_HA.Controls.Clear()
        spanTBL_HA.Controls.Add(CType(Session("tblHA"), Table))
    End If

表のセルに画像ボタンを追加中

img = New ImageButton

Session("tblHA_Counter") = CInt(Session("tblHA_Counter")) + 1

img.AlternateText = "Delete Row"
img.Attributes.Add("style", "height: 10px; width: 10px; cursor: hand;")
img.ImageUrl = "../images/minus_red.png"
img.ID = "img_" & CInt(Session("tblHA_Counter")).ToString
AddHandler img.Click, AddressOf imgRemove_Click
img.Attributes.Add("runat", "server")

tc.Attributes.Add("style", "width:35px")
tc.Controls.Add(img)

クリックイベント

Protected Sub imgRemove_Click(ByVal sender As Object, ByVal e As ImageClickEventArgs)
    Dim img As ImageButton = CType(sender, ImageButton)
    Dim delRow As TableRow = Nothing
    Dim rowIndex As Integer = 0

    For Each row As TableRow In CType(Session("tblHA"), Table).Rows
        If CType(row.Cells(3).Controls(0), ImageButton).UniqueID = img.UniqueID Then
            delRow = row
        End If
    Next

    If delRow IsNot Nothing Then
        CType(Session("tblHA"), Table).Rows.Remove(delRow)
    End If

    spanTBL_HA.Controls.Clear()
    spanTBL_HA.Controls.Add(CType(Session("tblHA"), Table))

End Sub
4

1 に答える 1

0

ASP.NETが動的に作成されたコントロールへのビューステート、ポストバックデータ、およびイベントワイヤアップを復元できるようにするには、ページが作成されるたびに動的コントロールを再作成する必要があります。したがって、ポストバックでもそれらを再作成することを忘れないでください。

すべてのポストバックでそれらを作成しているかどうかを確認してください。

于 2012-05-24T16:11:06.163 に答える