我的 DataView 的 Table 属性分配给我的 DataTables 之一。然后将 DataView 设置为我的 DataGridView 的 DataSource。像这样:
View.Table = DataSet1.Tables("dtArticles")
dgvArticles.DataSource = View
我的目标是对某些给定的行执行一些格式化。不幸的是,我发现这样做的唯一方法是使用 CellFormatting 事件。这很长,因为它必须遍历每一行并验证该行是否需要某种格式(粗体、背景色)。
单元格格式化
Private Sub dgvArticles_CellFormatting(sender As Object, e As System.Windows.Forms.DataGridViewCellFormattingEventArgs) Handles dgvArticles.CellFormatting
Dim drv As DataRowView
If e.RowIndex >= 0 Then
If e.RowIndex <= DataSet1.Tables("dtArticles").Rows.Count - 1 Then
drv = View.Item(e.RowIndex)
Dim c As Color
'Bolds if it is standard, makes it regular if it's not standard and already bold
If drv.Item("Standard").ToString = "Yes" Then
dgvArticles.Rows(e.RowIndex).DefaultCellStyle.Font = New Font("Microsoft Sans Sherif", 8, FontStyle.Bold)
End If
'Test if Standard is "No" and if the row is currently bold, if it is, put it back to regular
If drv.Item("Standard").ToString = "No" And Not dgvArticles.Rows(e.RowIndex).DefaultCellStyle.Font Is Nothing Then
If dgvArticles.Rows(e.RowIndex).DefaultCellStyle.Font.Bold Then
dgvArticles.Rows(e.RowIndex).DefaultCellStyle.Font = New Font("Microsoft Sans Sherif", 8, FontStyle.Regular)
End If
End If
'Puts a red color to the rows who are not available
If drv.Item("Available").ToString = "No" Then
'Change back color
c = Color.LightSalmon
e.CellStyle.BackColor = c
End If
End If
End If
End Sub
这对添加到 DataGridView 的每一行的单元格做了什么;它检查我Standard
的列的当前值是否等于是或否。根据结果,它将加粗/取消加粗该行。我的Available
专栏也是如此。如果可用值等于“否”,那么我将浅红色的背景颜色添加到该行。此事件被多次引发(10,000 篇文章,DataTable 大约有 10 列)。
平均约2.2-2.7秒
遍历 DataView
Dim i As Integer = 0
For Each dt As BillMat.dtArticlesRow In View.Table.Rows
If dt.Standard = "Oui" Then dgvArticles.Rows(i).DefaultCellStyle.Font = New Font("Microsoft Sans Sherif", 8, FontStyle.Bold)
If dt.Available = "Non" Then dgvArticles.Rows(i).DefaultCellStyle.BackColor = Color.LightSalmon
i += 1
Next
平均约 1.5-1.7 秒
是否可以使用 LINQ 选择哪一Standard
列等于“是”和哪一Available
列等于“否”的 RowIndex ?如果是的话,使用索引来应用格式不是比遍历整个 10,000 篇文章要快得多吗?