1

まず、これのほとんどは ItemTemplates を使用しても実行できることを認識しています。私がやろうとしていることが単に不可能な場合は、代わりにそれらを使用することを検討します.

私のジレンマの基本は次のとおりです。

CodeBehind に読み込まれる ASPX ページに GridView があります。各行には、OnRowCommand イベントをトリガーするボタンがいくつか含まれています。誰かが [編集] ボタンをクリックすると、TextBox オブジェクトを作成し、特定のセルの Controls コレクションに追加します。

これはうまくいきます。

問題は、人が「保存」ボタンをクリックすると、OnRowCommand が再びトリガーされますが、セルは Controls コレクションに 0 項目を登録していることです。これは PostBack の前に発生していると確信しているので、TextBox コントロールにアクセスできない理由がわかりません。

最初に TextBox を追加した後に確認したところ、セルに 1 つのコントロールが表示されます。テキストボックスを含むページをロードしてからボタンをクリックするまでの間のどこかで、これらのコントロールが失われました。Google はあまり役に立ちませんでした。何か案は?

4

4 に答える 4

1

テキストボックスを動的に作成しているため、ポストバックごとにグリッドを再バインドし、テキストボックスと ID (常に同じ) を指定して、イベントハンドラーを再アタッチする必要があります。

于 2009-06-17T13:09:21.277 に答える
1

ユーザーが編集ボタンをクリックすると、GridView の編集モードになります。それも設定する必要がありますか?

于 2009-06-17T13:10:18.217 に答える
1

その場でコントロールを作成している場合、それらはポストバックで常に消えます。つまり、サイクルごとに作成し続ける必要があります。

個人的には、ItemTemplates を使い続けることをお勧めします。これらすべてがもたらす頭痛から少しでも解放されるようにしてください。

于 2009-06-17T13:10:47.640 に答える
1

コードの背後にボタンを作成するときに、デリゲートを使用して addhandler を作成できます。ハンドラは、rowcommand の前に起動します。

 Protected Sub GridView1_RowCreated(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles GridView1.RowCreated

Dim btnsave As New ImageButton
If e.Row.RowType <> DataControlRowType.Pager And e.Row.RowType <>  DataControlRowType.Header Then
    AddHandler btnedit.Click, AddressOf btnedit_Click
    GridView1.Rows(i).Cells(8).Controls.Add(btndel)
end if

end sub

Public Delegate Sub ImageClickEventHandler(ByVal sender As Object, ByVal e As ImageClickEventArgs)
Sub btnedit_Click(ByVal sender As Object, ByVal e As ImageClickEventArgs)

//do whatever you want here.
//possibly a redirect to the current page so nothing else fires

end sub
于 2009-06-17T13:47:06.053 に答える