当DataGridView处于非活动状态时,改变某些行的背景颜色有什么最好的方法?
在“真实”的世界中,我想在按钮单击后使用它来格式化所有DataGridView行,具体取决于一些条件。
要重现此行为,请尝试:
1.在WinForms应用程序中放置带有两个选项卡页面的TabControl。在第一个选项卡上放置按钮,在第二个选项卡上放置DataGridView。
2.使用以下代码:
using System;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public int counter = 0;
public Form1()
{
InitializeComponent();
DataTable dt = new DataTable();
dt.Columns.Add("Name", typeof(string));
dt.Columns.Add("Surname", typeof(string));
dt.Rows.Add("Mark", "Spencer");
dt.Rows.Add("Mike", "Burke");
dt.Rows.Add("Louis", "Amstrong");
dataGridView1.DataSource = dt;
}
private void button1_Click(object sender, EventArgs e)
{
counter++;
this.Text = "Event counter: " + counter.ToString();
dataGridView1.Rows[1].DefaultCellStyle.BackColor = System.Drawing.Color.Red;
}
}
}
我将计数器变量放在那里来测试不同选项,以查看更改颜色事件被触发的次数(次数越少越好;) - 理想情况下只触发一次)。
现在,如果您首先点击按钮而不进入tabPage2,然后切换到tabPage2,则行的颜色不会更改。这是我的问题。
当您首先激活tabPage2,然后按下按钮或在程序上设置tabControl1.SelectedIndex = 1;
,然后着色行,然后切换回tabControl1.SelectedIndex = 0;
时,它将起作用 - 但在这种情况下,它会“闪烁”。
我还尝试将更改颜色的代码放在cell_painting事件中,但对我来说太过复杂 - 即使您在datagridview上移动鼠标,它也会在短时间内触发几百次,而我只需要执行一次。
您有什么建议来解决这个问题吗?
最好的问候,
Marcin