我從CSV文件中提取數據,在DataTable中解析數據,然後將此DataTable設置爲DataGrid的ItemsSource。然後,我循環DataTable對數據進行一些驗證,並且我想相應地爲DataGrid行着色。基於DataTable值爲DataGrid行着色
問題是,我找不到相應的DataGrid行基於DataTable行。
這裏是我的代碼:
Dim dg As New DataGrid
Dim dataTable as DataTable = ParseFile(filePath)
Dim statutList() As String = {"Saisi", "Validé", "Suspendu", "Annulé"}
dg.ItemsSource = dataTable.DefaultView
For Each row As DataRow In dataTable.Rows
'This line is what I tried, but it always returns nothing
Dim dgrow As DataGridRow = dg.ItemContainerGenerator.ContainerFromItem(row)
If Not statutList.Contains(row("Statut").ToString) Then
dgrow.Background = Brushes.Red
End If
Next
的問題來自於這條線,它不工作:
Dim dgrow As DataGridRow = dg.ItemContainerGenerator.ContainerFromItem(row)
SOLUTION:
兩個MM8解決方案的工作。就我而言,我用:
dg.UpdateLayout()
For Each row As DataRowView In dg.Items.OfType(Of DataRowView)
Dim dgrow As DataGridRow = dg.ItemContainerGenerator.ContainerFromItem(row)
If Not statutList.Contains(row("Statut").ToString) Then
dgrow.Background = Brushes.Red
End If
Next
我很想使用wpf方法,但這只是數據檢查代碼的一小部分。我必須檢查一些單元格與其他幾個值(+200)。您的代碼隱藏方法代碼不起作用。 – Naucle
「不工作」意味着什麼?你是否遇到異常或會發生什麼?您需要在容器實際創建完成後執行此代碼,例如,在窗口的Loaded事件發生時。你不能遍歷窗口構造函數中的容器。 – mm8
我在dgrow上得到一個NullReferenceException。 DataGrid實際上在檢查部分之前加載(For Each循環在dg.ItemsSource = dataTable.DefaultView填充容器之後) – Naucle