誰かが私にいくつかの指針を与えることができることを願っています。データベースから取得した値の変数セットに応じて、同じaspxページに複数のグリッドビューをプログラムで作成しているaspページがあります。
コード ビハインドで GridView をプログラムで作成しているため、ページが読み込まれるたびに、ポストバック、oninit などで gridview グリッドビューを作成する必要があります。現在、ページの OnInit 関数内でグリッドビューを作成しています。これは、ユーザーが行編集モードに入ってから [更新] (行更新) ボタン/リンクをクリックした場合を除いて、すべて正常に機能します。これにより、値が更新される前にデータベースからグリッド値をリロードするグリッドでのポストバックが強制され、RowUpdating イベントが起動されなくなります。どうすればこれを回避できますか? RowCommand イベントで選択したコマンドをキャプチャしようとしましたが、このイベントはポストバック後にのみ発生するため、Rowcommand の前に oninit 関数が最初に呼び出されるため、キャプチャしたコマンド名はほとんど役に立ちません。
Oninit関数で次のようにGridViewを作成しています
GridViewLineItem = New GridView
If bEnableEdit = True Then
GridViewLineItem.AutoGenerateEditButton = True
End If
If bEnableDelete = True Then
GridViewLineItem.AutoGenerateDeleteButton = True
End If
GridViewLineItem.AutoGenerateColumns = False
GridViewLineItem.EnableViewState = True
GridViewLineItem.Font.Name = "Arial"
GridViewLineItem.Font.Size = 8
GridViewLineItem.ForeColor = Drawing.Color.Black
GridViewLineItem.BackColor = Drawing.Color.White
GridViewLineItem.BorderColor = Drawing.Color.LightGray
GridViewLineItem.BorderStyle = BorderStyle.None
GridViewLineItem.BorderWidth = 1
GridViewLineItem.CellPadding = 4
GridViewLineItem.AlternatingRowStyle.BackColor = Drawing.Color.White
GridViewLineItem.FooterStyle.BackColor = Drawing.Color.BurlyWood
GridViewLineItem.HeaderStyle.BackColor = Drawing.Color.DarkGray
GridViewLineItem.HeaderStyle.Font.Bold = True
GridViewLineItem.HeaderStyle.ForeColor = Drawing.Color.Black
GridViewLineItem.PagerStyle.BackColor = Drawing.Color.Beige
GridViewLineItem.PagerStyle.ForeColor = Drawing.Color.Black
GridViewLineItem.PagerStyle.HorizontalAlign = HorizontalAlign.Right
GridViewLineItem.RowStyle.BackColor = Drawing.Color.Beige
GridViewLineItem.ID = "LineItemGridView" + strItemID
strCBItemID = strItemID
AddHandler GridViewLineItem.RowEditing, AddressOf GridViewLineItem_RowEditing
AddHandler GridViewLineItem.RowCancelingEdit, AddressOf GridViewLineItem_RowCancelingEdit
AddHandler GridViewLineItem.RowDataBound, AddressOf GridViewLineItem_RowDataBound
AddHandler GridViewLineItem.RowUpdating, AddressOf GridViewLineItem_RowUpdating
AddHandler GridViewLineItem.PageIndexChanging, AddressOf GridViewLineItem_PageIndexChanging
AddHandler GridViewLineItem.PreRender, AddressOf GridViewLineItem_PreRender
AddHandler GridViewLineItem.PageIndexChanged, AddressOf GridViewLineItem_PageIndexChanged
AddHandler GridViewLineItem.RowDeleting, AddressOf GridViewLineItem_OnDeleting
AddHandler GridViewLineItem.RowCommand, AddressOf GridViewLineItem_RowCommand
'bind data source
dt = New DataTable
oda = New OleDb.OleDbDataAdapter
oda.Fill(dt, rsGroup)
GridViewLineItem.DataSource = dt
GridViewLineItem.DataBind()
'Add gridview to page
tCell.Controls.Add(GridViewLineItem)
tRow.Cells.Add(tCell)
TableLineItem.Rows.Add(tRow)
LineItemPanel.Controls.Add(TableLineItem)
LineItemPanel.BorderStyle = BorderStyle.Solid
LineItemPanel.BorderWidth = 3
LineItemPanel.BorderColor = Drawing.Color.DarkGray
tGroupRow = New TableRow
tGroupCell = New TableCell
tGroupCell.ColumnSpan = TableGroupDetails.Rows.Item(0).Cells.Count
tGroupCell.Controls.Add(LineItemPanel)
tGroupRow.Cells.Add(tGroupCell)
TableGroupDetails.Rows.Add(tGroupRow)
ユーザーが行の更新をクリックしたときにグリッドビューのデータバインドをスキップする方法について、誰かが私にいくつかの指針を教えてもらえますか? Gridview の Databind を無差別に page.IsPostback = false の周りに結び付けることはできません。グリッドは一度だけ読み込まれ、ユーザーがクリックして行編集モードに入るときなど、別の有効なポストバックが発生します。空のグリッド。
ありがとう
百万のサムガイに感謝します!GridView バインドを Page.PreRender に移動すると、問題が解決しました。私のイベントの流れは、Page.Oninit (グリッドビューが実行時に作成される場所) -> Page.Load (グリッドビュー バインド) -> GridView.RowUpdating (データベースへの変更をコミットしていた場所) でした。Page.OnInit (グリッドビューの作成) -> GridView.RowUpdating (データベースへの変更のコミット) -> Page.PreRender (グリッドビューがバインドされている場所) です。唯一の問題は、iTemplate を使用してグリッドビューの編集モード用に ajaxcombobox をレンダリングしていることです。これに対するユーザーの選択は、GridView.RowUpdating イベントが呼び出されるまでに失われます。テキストボックスなどの他のすべてのフィールドは、ユーザー入力値を保持します。これをもう少し掘り下げて、何が見つかるかを確認します。
PS何らかの理由で、これをあなたの投稿の下にコメントとして投稿できません...
PPS は、グリッドビュー編集モードでの Ajax Combobox の問題を修正しました。enableviewstate を true に設定する必要がありました
AjaxComb を新しい AjaxControlToolkit.ComboBox として薄暗くする
AjaxComb.EnableViewState = True
これは少し奇妙です...デフォルトがtrueだったと思うでしょう...