首页 > 解决方案 > 根据值更改 DataGridView 列的颜色

问题描述

我正在尝试根据其值更改 DataGridView 中列的颜色。这是我的代码。但是,我的if陈述中有错误。

如果它的值小于零,我想将 Column 的背景颜色更改为 Color.Red。

private void DataColor()
{
    foreach (DataGridViewColumn col in MyDataGrid.Columns)
    if (Convert.ToInt32(col[5].Value) < 0)
    {
        MessageBox.Show("Test");

    }
}

我需要的输出:

输出

标签: c#winformsdatagridview

解决方案


看看以下是否适用于您使用 .NET Framework 4.8 完成的操作。将 DataGridView 添加到新表单,添加下面的代码,将表单名称更改为您的表单名称。

完整代码

在此处输入图像描述

using System;
using System.Data;
using System.Drawing;
using System.Windows.Forms;

namespace DataGridViewCellFormatting1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            Shown += OnShown;
        }

        private void OnShown(object sender, EventArgs e)
        {
            dataGridView1.DataSource = MockedDataTable.Table();
            dataGridView1.CellFormatting += DataGridView1OnCellFormatting;
        }

        private const string _amountColumnName = "Amount";
        private void DataGridView1OnCellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
        {
            if (!dataGridView1.Columns[e.ColumnIndex].Name.Equals(_amountColumnName)) return;
            if (e.Value == null || !int.TryParse(e.Value.ToString(), out var amount)) return;
            
            dataGridView1.Rows[e.RowIndex].Cells[_amountColumnName].Style.BackColor = amount >0 ? 
                Color.Empty : 
                Color.Red;
        }
    }

    public class MockedDataTable
    {
        public static DataTable Table()
        {
            var dt = new DataTable();

            dt.Columns.Add(new DataColumn()
            {
                ColumnName = "id", 
                DataType = typeof(int), 
                AutoIncrement = true, 
                AutoIncrementSeed = 1
            });
            
            dt.Columns.Add(new DataColumn() { ColumnName = "Amount", DataType = typeof(int) });

            dt.Rows.Add(null, 200);
            dt.Rows.Add(null, 1000);
            dt.Rows.Add(null, -3200);
            dt.Rows.Add(null, -300);
            dt.Rows.Add(null, 500);


            return dt;
        }
    }
}

推荐阅读