CSVファイルからデータを取得し、DataTableで解析してから、このDataTableをDataGridのItemsSourceとして設定しています。次に、DataTableをループしてデータの検証を行い、それに応じてDataGridの行を色付けする必要があります。DataTable値に基づいてDataGrid行の色を設定します。
問題は、DataTable行に基づいて対応するDataGrid行が見つかりません。
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