選択したオプションのセットに基づいて作成されたクエリによって設定される DataTable に動的にバインドする GridView コントロールがあります。
私がやろうとしているのは、データベース フィールドの値に基づいて特定の行をフォーマットするために、単純に RowDataBound イベントを処理することです。このイベント ハンドラのコードは正常に動作します。私の問題は、このイベントを呼び出すと、最初の行がバインドされた後に DataTable にバインドした後に Gridview が停止したかのように、GridView が DataTable の最初のレコードのみを表示することです。
ハンドラーを動的に追加しようとしましたが、同じ結果が得られます。
このイベントを処理するだけで Gridview がこれを行う理由についてのアイデアはありますか?
十分なデータが返されるという事実を知っています (DataTable はすべてのレコードでいっぱいになり、RowDataBound イベントに触れていない場合、GridView はすべてのレコードを正常に表示します)。
クエリを生成し、DataTable に入力し、GridView をバインドした直後にハンドラーを追加しています。
oDA.Fill(oDTbl)
figs_gv.DataSource = oDTbl
figs_gv.DataBind()
AddHandler figs_gv.RowDataBound, AddressOf gvRowDataBound
ハンドラー自体:
Protected Sub gvRowDataBound(ByVal sender As Object, ByVal e As GridViewRowEventArgs)
If e.Row.RowType = DataControlRowType.DataRow Then
If (e.Row.DataItem("Have") = "Yes") Then
For i As Integer = 1 To e.Row.Cells.Count
e.Row.Cells(i).BackColor = Drawing.ColorTranslator.FromHtml("#d3f1c7")
Next
End If
End If
End Sub
また、RowDataBound を処理するときに、GridView の DATABOUND イベントが発生しないことも確認しました。最初の行をバインドした直後にバインドを停止するようです。