如何在 C# 中根据文本条件更改 dataGridView 单元格颜色
How to change dataGridView cell color on text condition in C#
我想在 dataGridView 单元格从数据库中检索数据后为其着色。如果单元格文本有一个“X”,则用绿色黄色为单元格着色。我尝试编写代码,但没有成功。
这是我目前拥有的代码:
private void button2_Click(object sender, EventArgs e)
{
string constring = "Data Source = localhost; port = 3306; username = root; password = 0159";
MySqlConnection conDataBase = new MySqlConnection(constring);
MySqlCommand cmdDataBase = new MySqlCommand("Select * from TopShineDB.Table1 ;", conDataBase);
using (MySqlConnection conn = new MySqlConnection(constring))
{
try {
MySqlDataAdapter sda = new MySqlDataAdapter();
sda.SelectCommand = cmdDataBase;
DataTable dt = new DataTable();
sda.Fill(dt);
foreach (DataRow item in dt.Rows)
{
int n = dataGridView1.Rows.Add();
dataGridView1.Rows[n].Cells[0].Value = item["Timee"].ToString();
dataGridView1.Rows[n].Cells[1].Value = item["CarColorNumber"].ToString();
dataGridView1.Rows[n].Cells[2].Value = item["Interior"].ToString();
dataGridView1.Rows[n].Cells[3].Value = item["Exterior"].ToString();
if (dataGridView1.CurrentCell.Value == item["Interior"] + " X".ToString())
{
dataGridView1.CurrentCell.Style.BackColor = Color.GreenYellow;
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
有什么想法可以让它发挥作用吗?
谢谢
您应该设置要更改的单元格的样式。
如果您在加载数据的地方包含下面的方法并将其添加到 Scroll 事件中,它将根据需要为您的单元格着色,并且仅当该单元格可见时。
这是一个重要的性能问题,如果你有很多行
public void SetRowColor()
{
try
{
for (int i = 0; i < this.dataGridView.Rows.Count; i++)
{
if (this.dataGridView.Rows[i].Displayed)
{
if (this.dataGridView.Columns.Contains("Interior"))
{
if ((int)this.dataGridView.Rows[i].Cells["Interior"].Value == "X")
{
this.dataGridView.Rows[i].Cells["Interior"].Style.BackColor = Color.Green;
this.dataGridView.Rows[i].Cells["Interior"].Style.ForeColor = Color.White;
this.dataGridView.InvalidateRow(i);
}
else
{
this.dataGridView.Rows[i].Cells["Interior"].Style.BackColor = Color.White;
this.dataGridView.Rows[i].Cells["Interior"].Style.ForeColor = Color.Black;
this.dataGridView.InvalidateRow(i);
}
}
}
}
}
}
希望这能让您更接近您的需求。
托马斯
我想在 dataGridView 单元格从数据库中检索数据后为其着色。如果单元格文本有一个“X”,则用绿色黄色为单元格着色。我尝试编写代码,但没有成功。
这是我目前拥有的代码:
private void button2_Click(object sender, EventArgs e)
{
string constring = "Data Source = localhost; port = 3306; username = root; password = 0159";
MySqlConnection conDataBase = new MySqlConnection(constring);
MySqlCommand cmdDataBase = new MySqlCommand("Select * from TopShineDB.Table1 ;", conDataBase);
using (MySqlConnection conn = new MySqlConnection(constring))
{
try {
MySqlDataAdapter sda = new MySqlDataAdapter();
sda.SelectCommand = cmdDataBase;
DataTable dt = new DataTable();
sda.Fill(dt);
foreach (DataRow item in dt.Rows)
{
int n = dataGridView1.Rows.Add();
dataGridView1.Rows[n].Cells[0].Value = item["Timee"].ToString();
dataGridView1.Rows[n].Cells[1].Value = item["CarColorNumber"].ToString();
dataGridView1.Rows[n].Cells[2].Value = item["Interior"].ToString();
dataGridView1.Rows[n].Cells[3].Value = item["Exterior"].ToString();
if (dataGridView1.CurrentCell.Value == item["Interior"] + " X".ToString())
{
dataGridView1.CurrentCell.Style.BackColor = Color.GreenYellow;
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
有什么想法可以让它发挥作用吗?
谢谢
您应该设置要更改的单元格的样式。
如果您在加载数据的地方包含下面的方法并将其添加到 Scroll 事件中,它将根据需要为您的单元格着色,并且仅当该单元格可见时。 这是一个重要的性能问题,如果你有很多行
public void SetRowColor()
{
try
{
for (int i = 0; i < this.dataGridView.Rows.Count; i++)
{
if (this.dataGridView.Rows[i].Displayed)
{
if (this.dataGridView.Columns.Contains("Interior"))
{
if ((int)this.dataGridView.Rows[i].Cells["Interior"].Value == "X")
{
this.dataGridView.Rows[i].Cells["Interior"].Style.BackColor = Color.Green;
this.dataGridView.Rows[i].Cells["Interior"].Style.ForeColor = Color.White;
this.dataGridView.InvalidateRow(i);
}
else
{
this.dataGridView.Rows[i].Cells["Interior"].Style.BackColor = Color.White;
this.dataGridView.Rows[i].Cells["Interior"].Style.ForeColor = Color.Black;
this.dataGridView.InvalidateRow(i);
}
}
}
}
}
}
希望这能让您更接近您的需求。
托马斯