- - PR -
GridView内の二つのLinkButtonのCommandArgumentに値をセット
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2009-03-10 18:10
Visual Web Developer 2008 Express Editionで
サーバ・クライアントのシステムを開発しています。 asp.net / 言語は vb.net 今、GridViewの中の違うセルに二つのLinkButtonをセットしています。 RowCreatedイベントで、この二つのボタンのCommandArgumentに数値をセットしています。 --- ソース参照 --- Private Sub gv_RowCreated(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles gvIchiran.RowCreated If e.Row.RowType = DataControlRowType.DataRow Then Dim linkBtn1 As LinkButton = CType(e.Row.Cells(1).Controls(1), LinkButton) Dim linkBtn2 As LinkButton = CType(e.Row.Cells(7).FindControl("linkBtnName2"), LinkButton) If e.Row.RowType = DataControlRowType.Header Then iRowCreatedNo = 1 ElseIf e.Row.RowType = DataControlRowType.DataRow Then iRowCreatedNo += 1 ElseIf e.Row.RowType = DataControlRowType.EmptyDataRow Then Exit Sub ElseIf e.Row.RowType = DataControlRowType.Separator Then iRowCreatedNo = iRowCreatedNo ElseIf e.Row.RowType = DataControlRowType.Footer Then iRowCreatedNo = 0 ElseIf e.Row.RowType = DataControlRowType.Pager Then iRowCreatedNo = 0 End If linkBtn1.CommandArgument = iRowCreatedNo linkBtn2.CommandArgument = iRowCreatedNo + 23 linkBtn1.CommandName = "LinkBtn1" linkBtn2.CommandName = "LinkBtn2" End If End Sub ---- ソース参照終わり --- そして、LinkButton1をクリックすると、 RowCommandイベントでクリックしたLinkButton1の値を取得してみると ---- ソース2 --- Private Sub gv_RowCommand(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewCommandEventArgs) Handles gvIchiran.RowCommand If e.CommandName = "LinkBtn1" Or e.CommandName = "LinkBtn2" Then Dim index As Integer = Convert.ToInt32(e.CommandArgument) <--(2) Dim row As GridViewRow = gvIchiran.Rows(index - 1) End If End Sub --- ソース2 End --- (2) で取得できた番号が、 1行目の場合で LinkButton1.CommandArgument --> 24 LinkButton2.CommandArgument --> 47 になっています。 これは、正解は LinkButton1 -> 1 LinkButton2 -> 24 とならなくてはいけませんが。 なぜこのようになるのかがわかりません。 linkButton1は、1〜23の番号が振られ LinkButton2は、24〜46の番号が振られます。 これで、どのレコードを取得しているかを判別したいのですが、 今のところ、LinkButton1をクリックするとLinkButton2のレコードの数値になり、 判別不可能となっています。 この原因がわかる人がいたら、ぜひ教えていただけませんか。 よろしくお願いします。 [ メッセージ編集済み 編集者: apo 編集日時 2009-03-10 18:18 ] | ||||
|
投稿日時: 2009-03-10 18:40
デバッグしてわかったことですが、
GridViewのRowCreatedでの処理が実行された後、 Page_Loadイベントで me.Grid.DataBind() を実行すると、再度RowCreatedの処理が実行されています。 このため、LinkButtonのCommandArgumentに再度値が設定され 値が二回目に続けて実行したときの数になっているみたいです。 このバグの回避の方法を考えていますが、 1つは、 一度、Page_Loadで、CommandArgumentに入れる 数値の変数を初期化する。 これ以外に良い方法がありますでしょうか? よろしくお願いします | ||||
|
投稿日時: 2009-03-10 22:25
ポストバックのときもme.Grid.DataBind()を実行していませんか?
IsPostBackでないときだけ実行するようにしてみては? | ||||
|
投稿日時: 2009-03-11 05:38
Grid.DataBind()の処理ですが、すべてシステムに委ねるか それともすべてアプリケーション側で行うか どっちかに統一したらどうでしょうか。 今回のように、システムとアプリケーション側で混在させると 期待しない結果になると思います。 _________________ ASP.NET+Ajaxサンプル集 | JavaScript+Ajaxサンプル集 | ||||
|
投稿日時: 2009-03-16 10:06
とても参考になりました。
初期化するところを修正して問題は解決しました。 それと、isPostBackのところは間違っていましたので修正しました。 また、何かありましたらよろしくお願いします。 [ メッセージ編集済み 編集者: apo 編集日時 2009-03-16 10:07 ] |
1