2016-09-01 11 views
0

でWPFのDataGridからコンテナを取得し、次のようにデータをバインドします。 は、私はこれらの行は、私はWPFのデータグリッドを使用していたDataRow


public void HighlightRows(IEnumerable<DataRow> rows, DataGrid grid) 
{ 
    foreach(var row in rows) 
    { 
     DataGridRow dgr = grid.ItemContainerGenerator.ContainerFromItem(row) as DataGridRow; 
     if (dgr != null) 
     { 
      dgr.Background = Brushes.LightBlue; 
     } 
    } 
} 

の背景を設定したいが、私は常にDGRのnull参照ポインタを受け取ります。私はDataRowがDataRowViewに変換されることに気付きました。そのため、DataGridはDataRowアイテムに対してコンテナを表すことができませんでした。

どちらが良い解決策ですか?

答えて

0

Datadridがバーチャル化を使用しているため、grid.ItemContainerGenerator.ContainerFromItemの代わりにgrid.ItemContainerGenerator.ContainerFromIndex関数を使用してください。その時点でItemは生成されません。 ContainerFromIndex関数からは、datagridrowをフェッチし、DatarowをDatarowと比較してDatarowを比較することができます。更新された機能は次のとおりです。

public void HighlightRows(IEnumerable<DataRow> rows, DataGrid grid) 
    {   
     for (int index = 0; index < grid.Items.Count; index++) 
     { 
      DataGridRow dgr = grid.ItemContainerGenerator.ContainerFromIndex(index) as DataGridRow; 

      if (dgr.Item.GetType() == typeof(DataRowView)) 
      { 
       foreach (DataRow row in rows) 
       { 
        var array1 = row.ItemArray; 
        var array2 = (((DataRowView)dgr.Item).Row).ItemArray; 

        if (array1.SequenceEqual(array2)) 
        { 
         dgr.Background = Brushes.LightBlue; 
        }       
       } 
      } 
     } 
    } 
関連する問題