経済的な方法は、CellFormatting
イベントを使用することです。これは、そのセルが最初に表示されたときに起動します。それは可視の行に対してのみ発火するので、より速くなければなりません。
Then I loop through the grid view to do something like update the data of all colored rows
データをDBから来る場合には(OPクエリを言及)あなたは、データソースのようなデータに作用されるべきです。 DGVは、ユーザーのデータビューです。特定の色の行に作用するのではなく、部品番号や色を決めるものに基づいて行動します。プロセスの簡素化のために、この番号またはその部分番号を持つレコードのビューを作成し、それに対してact/loopを作成することもできます。データを変更することができますので
、あなたは2つのイベントを処理することをお勧めします:CellFormatting
と
Private Sub dgv1_CellFormatting(...) Handles dgv1.CellFormatting
' default start up color
If e.ColumnIndex = 3 Then
e.FormattingApplied = ColorMyRow(e.RowIndex, e.ColumnIndex)
Else
e.FormattingApplied = False
End If
End Sub
Private Sub dgv1_CellValueChanged(...) Handles dgv1.CellValueChanged
' if the target cell changes, update
If e.ColumnIndex = 3 Then
ColorMyRow(e.ColumnIndex, e.RowIndex)
End If
End Sub
' DRY
Private Function ColorMyRow(rowIndex As Int32, colIndex As Int32) As Boolean
Dim bass As Color = Color.PeachPuff
Dim pike As Color = Color.SeaShell
Dim salmon As Color = Color.Salmon
Select Case dgv1.Rows(rowIndex).Cells(colIndex).Value.ToString
Case "Bass"
dgv1.Rows(rowIndex).DefaultCellStyle.BackColor = bass
Return True
Case "Pike"
dgv1.Rows(rowIndex).DefaultCellStyle.BackColor = pike
Return True
Case "Salmon"
dgv1.Rows(rowIndex).DefaultCellStyle.BackColor = salmon
Return True
End Select
Return False
End Function
色a)は、ユーザーがセルを編集するかどうか更新されます
CellValueChanged
、B)あなたは、セルの値を変更します(dgv1.Rows(0).Cells(3).Value = "Mermaid"
)、またはc)データソース(dtParts.Rows(0)(3) = "Pike"
)を変更します。
青色の行にループしようとして
最後に、むしろそれから、あなたは、この場合には、DataTable
をDataSource
を照会することができます
Dim bassRows = dtSample.Select("Fish = 'Bass'")
For Each dr As DataRow In bassRows
dr("Fish") = "Pike"
Next
色が自動的に変更されます。
dgvはDataTableのようなものにバインドされていますか? WHERE句がPart_No = 'Part A''の場合、Part BとCはそこで何をしていますか? – Plutonix
@Plutonix申し訳ありませんが、私はそれがはっきりしないと思います。はい、datagridviewはデータソースにバインドされています。私が述べたwhere節は、私が各行をループしているときのクエリのためのものです。 – crimson589