あなたが行にいくつかの書式を適用するCellFormatting
またはRowPrepaint
evantを使用することができます。この場合、イベントが発生した行の条件を確認し、必要に応じて行にフォーマットを適用すれば十分です。イベントは、単に表示される行のために提起されているので(この場合はcellFormatting
よりも高速であるように思われmentioningRowPrePaint
ためPlutonixに感謝します。)
は、あなたがあまりにも多くの行を持っている場合でも、パフォーマンス上の問題がないだろう。とにかくDataGridView
の行数が多すぎると良い考えではありません。このような場合は、virtualizationやページングのような仕組みを使用する必要があります。
例
かかわらず、レコード数の、ここで私はあなたがButton1
を押した場合は、TextBox1
に入力したテキストとそのFirstName
始まる行を色付け例です。 TextBox1
に空の文字列を入力し、Button1
を押すと、すべての行が黒で表示されます。
例を機能させるには、フォームにDataGridView1
,TextBox1
およびButton1
が必要です。
Public Class Form1
Dim dt As DataTable
Dim filter As String = ""
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
dt = New DataTable
dt.Columns.Add("FirstName")
dt.Columns.Add("LastName")
dt.Rows.Add("John", "Doe")
dt.Rows.Add("John", "Smith")
dt.Rows.Add("Sara", "Allen")
Me.DataGridView1.DataSource = dt
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
filter = Me.TextBox1.Text
Me.DataGridView1.Invalidate()
End Sub
Private Sub DataGridView1_RowPrePaint(sender As Object, _
e As DataGridViewRowPrePaintEventArgs) Handles DataGridView1.RowPrePaint
If (e.RowIndex < 0 OrElse e.RowIndex = DataGridView1.NewRowIndex) Then Return
Dim row = DataGridView1.Rows(e.RowIndex)
If (String.IsNullOrEmpty(filter)) Then
row.DefaultCellStyle.ForeColor = Color.Black
Else
Dim data = DirectCast(DataGridView1.Rows(e.RowIndex).DataBoundItem, _
DataRowView).Row
If data.Field(Of String)("FirstName").ToLower() _
.StartsWith(filter.ToLower()) Then
row.DefaultCellStyle.ForeColor = Color.Red
Else
row.DefaultCellStyle.ForeColor = Color.Black
End If
End If
End Sub
End Class
注
あなたはDataGridView
のDataSource
として設定されたデータテーブルにRowFilter
を適用すると、それだけでフィルターの行を示しています。だから私はあなたが赤でフィルタリングされた行と黒で他の色を塗りたいので、私はそれを使用しなかったので、すべての行を表示する必要があります。
100Kは本当にあまりにも多くのレコーダーです。 'DataGridView'にすべての100K +レコードを表示しないでください。ページング/フィルタリングのメカニズムを使用し、いくつかの行を表示するだけです。 –
@RezaAghaeiそれは私が達成しようとしているものには本当に適合しません。選択したレコードと選択されていないレコードを比較するために、すべてのレコードをスクロールする必要があります。 – Chrisetiquette
['VirtualMode'](https://msdn.microsoft.com/en-us/)ライブラリ/ 15a31akc(v = vs.110).aspx)を 'DataGridView'に追加しました。 –