wpf datagrid 單元格顏色 根據條件改變顏色 根據表datatable動態顯示datagrid內容

 最近要用wpf寫程序,要改變datagrid的單元格顏色,根據條件改變顏色

廢話不多說了,直接代碼吧,都是很簡單的代碼。


 準備工作:添加一個顏色的值轉換器。我這裏寫在window的資源文件了,只這個窗口使用。可以根據實際情況添加。(這個之前代碼裏面有,博客裏寫掉了,感謝 xhh325的提問

<Window.Resources>
        <local:ColorConvert x:Key="ColorConvert"/>
    </Window.Resources>


首先,datagrid控件設置好,主要是數據綁定,和值轉換

<my:DataGrid AutoGenerateColumns="False" Margin="10,10,10,10" Name="dataGrid"  >
    <my:DataGrid.CellStyle >
        <Style TargetType="my:DataGridCell">
            <Style.Triggers >
                <Trigger Property="IsSelected" Value="True">
                    <Setter Property="Background" Value="White"></Setter>
                    <Setter Property="Foreground" Value="Black"/>
                    <Setter Property="BorderThickness" Value="0"></Setter>
                </Trigger>
                <Trigger Property="IsSelected" Value="False">
                    <Setter Property="Background" Value="White"></Setter>
                    <Setter Property="Foreground" Value="Black"/>
                    <Setter Property="BorderThickness" Value="0"></Setter>
                </Trigger>
            </Style.Triggers>
        </Style>
    </my:DataGrid.CellStyle>
    <my:DataGrid.Columns>
        <my:DataGridTemplateColumn Header="xxx" >
            <my:DataGridTemplateColumn.CellTemplate>
                <DataTemplate >
                    <TextBlock Text="{Binding xxx}" Background="{Binding Path=xxx,Converter={StaticResource colorConvert}}"    Foreground="Black" />
                </DataTemplate>
            </my:DataGridTemplateColumn.CellTemplate>
        </my:DataGridTemplateColumn>
    </my:DataGrid.Columns>
</my:DataGrid>

然後,根據條件寫好值轉換器就行了

namespace xxx
{
    //定義值轉換器
    [ValueConversion(typeof(string), typeof(string))]
    public class ColorConvert : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            string strValue = value.ToString();
            if (strValue == "紅色警報")
            {
                return "Red";
            }
          

            return "White";
        }

        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {

            return "";
        }
    }
}

 

總結一下,主要注意3點:
1、根據條件定義一個值轉換顏色的類
2、在xaml利用定義值轉換類的靜態資源,方面後面使用
3、綁定數據

之前,我很多博客都是直接代碼,沒有很多文章描述,也沒有完整例子,因爲我通常只看關鍵技術點,然後能把這些東西拼湊成我想要的(這些博客主要是想對自己以後的方便吧)。
今天看到xhh325留言說有異常,至於什麼原因引起的,我不知道他的代碼,也不清楚什麼原因。於是,總結了上面3個關鍵點吧,並寫了個簡單的小例子(http://download.csdn.net/source/3461165),以供參考。


在我剛編輯完博客不久,xhh325又提出的新的要求:DataGrid需要動態綁定一個DataTable數據源,而且DataTabel的列是不確定的,需要根據最後一列的內容判定顏色,”完成“顯示綠色,其它顯示紅色
其實,主要是把xaml寫的代碼,換成c#的,如下:
// 初始化dataGrid2
        void InitDataGrid2()
        {
            // 知道動態得到的dt,動態顯示到datagrid
            int colCount = dt.Columns.Count;
            for (int i = 0; i < colCount; ++i )
            {
                string colName = dt.Columns[i].ToString();
                DataGridTemplateColumn column = new DataGridTemplateColumn();
                column.Header = colName;


                DataTemplate dataTemplate = new DataTemplate();
                FrameworkElementFactory tbContent = new FrameworkElementFactory(typeof(TextBlock));
                // 設置內容
                tbContent.SetValue(TextBlock.TextProperty, new Binding(colName));
                // 文字顏色
                tbContent.SetValue(TextBlock.ForegroundProperty, Brushes.Black);
                // 背景顏色
                Binding bindBackColor = new Binding(colName);
                bindBackColor.Converter = new ColorConvert();
                tbContent.SetValue(TextBlock.BackgroundProperty, bindBackColor);
                // 單元格長度,用浮點數。3.5版本下用整數會異常,其他版本不清楚
                tbContent.SetValue(TextBlock.WidthProperty, 100.0);
                dataTemplate.VisualTree = tbContent;

                column.CellTemplate = dataTemplate;

                dataGrid2.Columns.Add(column);
            }

        }
至於他的要求,我就不寫了。根據上面改一改就可以了。新上傳的例子:http://download.csdn.net/source/3462049http://alsmile.download.csdn.net/

發佈了59 篇原創文章 · 獲贊 16 · 訪問量 37萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章