0

datagridバインドされている がありdatatableます。各セルには一意の値があるため、2 つのセルに同じ値はありません。

値が 1 (int32) のセルを緑色に変更したいと考えています。1 の値は動的であることに注意してください。これは単なる例であり、1 ~ 90 の間である可能性があります。

私は周りを検索しましたが、ほとんどのヘルプは、座標に基づくセルの値、つまり (4,2) または選択したセルの値を提供します。これは私が望むものではありません。セルの値に基づいてセルの色を変更したいのです。

これを行う方法はありますか。たとえば、JavaScript では、各セルにその値に相当する ID を割り当てるだけです$('#' + 1).css('background-color:green;')(注: これは正しい構文ではないかもしれませんが、画像は得られます)。これと同じくらい簡単な方法、またはこれを行う標準的な方法はありますか?

私のデータグリッド

<DataGrid Name="grid" ItemsSource="{Binding}" Height="300" Width="900"
          AutoGenerateColumns="True"
          VerticalScrollBarVisibility="Disabled" HorizontalAlignment="Center" VerticalAlignment="Top" RowHeight="40">
            <DataGrid.ItemsPanel>
                <ItemsPanelTemplate>
                    <WrapPanel Orientation="Vertical" />
                </ItemsPanelTemplate>
            </DataGrid.ItemsPanel>
        </DataGrid>

テーブルの作成

DataSet dataSet = new DataSet("myDS");
            DataTable numbersTable = new DataTable("Numbers");
            numbersTable.Columns.Add("Number", typeof(Int32));
            for (int i = 1; i < 91; i++)
            {
                numbersTable.Rows.Add(i);
            }
            dataSet.Tables.Add(numbersTable);
            grid.DataContext = numbersTable.DefaultView;
4

3 に答える 3

3

この値に基づいてDataGridセルの色を変更するをご覧ください

Public class NameToBrushConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        string input = value as string;
        switch (input)
        {
            case "John":
                return Brushes.LightGreen;
            default:
                return DependencyProperty.UnsetValue;
        }
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        throw new NotSupportedException();
    }
}

グリッド:

<DataGridTextColumn Binding="{Binding Name}">
    <DataGridTextColumn.ElementStyle>
        <Style TargetType="{x:Type TextBlock}">
            <Setter Property="Background" Value="{Binding Name, Converter={StaticResource NameToBrushConverter}}"/>
        </Style>
    </DataGridTextColumn.ElementStyle>
</DataGridTextColumn>

ブラシ:

public string Name
{
    get { return _name; }
    set
    {
        if (_name != value)
        {
            _name = value;
            OnPropertyChanged("Name");
            OnPropertyChanged("NameBrush");
        }
    }
}

public Brush NameBrush
{
    get
    {
        switch (Name)
        {
            case "John":
                return Brushes.LightGreen;
        }

        return Brushes.Transparent;
    }
}
于 2013-12-02T08:20:10.437 に答える