0

DataSet を介してデータベースからデータを取り込む DataGrid があります。ここで、セルの値とその他の要素に基づいて、セルの背景に色を付ける必要があります。

2 日間の大半をインターネットの検索に費やした後、IValueConverter を使用してこれを実行することにしました。私のコードを書いた後、コードは正常に実行されます。私がテストしたところ、1) IValueConverter クラスが呼び出され、2) 実際に Brush Color が返されていることがわかりました。

私の問題は、セルが実行時に適用されたブラシ パレットで色付けされていないことです。

奇妙なことに、各行を選択すると、色が付けられるはずのセルがデフォルトの「選択青」とは異なる色 (この場合は明るい白) で強調表示されるため、何かが機能していることがわかります。したがって、何らかの理由で、セルが変換されて IValueConverter が呼び出されても、レイアウトには表示されません。また、CellStyle を単純な色 (この場合は LimeGreen) に設定し、IValueConverter を完全に無視して、セルが Lime-Green で表示されるという別のテストも実行しました。これにより、Binding と Convert() の間のどこかで何かが間違っていると思われます。

なぜ変換色が表示されないのか、まったく困惑しており、Google の最初の数ページですべての検索結果を調べ尽くしたので、誰かが私のコードを見て、正確に指摘してくれることを願っています。 DataGrid がこのように動作する理由。

DataTable dt = new DataTable();
        dt = ((DataSet)ItemSource).Tables[0];
        int counter = 0;

        foreach (DataColumn dc in dt.Columns)
        {
            switch(dc.ColumnName)
            { 
             (....)
             case "SEAPCT":
                    DataGridTextColumn col2 = new DataGridTextColumn();

                    col2.Header = (((DataSet)ItemSource).Tables[0].Columns[counter].ToString()).Replace("PCT", "%");
                    col2.Binding = new Binding(dc.ColumnName);

                    Style style = new Style(typeof(DataGridCell));

                    Setter setter = new Setter();
                    setter.Property = DataGridCell.BackgroundProperty;

                    Binding b = new Binding(dc.ColumnName);
                    b.Converter = new PercentCellConverter();

                    setter.Value = b;
                    style.Setters.Add(setter);

                    col2.CellStyle = style;


                    DashboardGrid.Columns.Insert(counter, col2);
                    counter++;
                    break;
            }
        }

        DashboardGrid.ItemsSource = dt.DefaultView;
  }

そして、参考までに、私の IValueConverter クラス:

public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
       string n = value.ToString();
        System.Diagnostics.Debug.WriteLine(n);

       if (double.Parse(n) > 0)
            return Brushes.LimeGreen;
        else if (double.Parse(n) == 0)
            return Brushes.Yellow;
        else
            return Brushes.Red;

    }
4

1 に答える 1

1

私はそれを理解しました:私のIValueConverterクラスでは、System.Drawing.Brushes代わりにSystem.Windows.Media.Brushes. そのため、私のコンバーター正常に動作していましたが、単に間違ったタイプのカラー グループを返していたため、色が表示されませんでした。

于 2012-02-27T16:11:44.237 に答える