当它不活动时
,在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上,它也会在短时间内被激发几百次,而我需要只做一次。
您对如何解决该问题有任何建议吗?
最好的问候,
马尔钦
答案 0 :(得分:1)
一种可能性是datagridview paint事件中的颜色(当tabpage更改时会触发)。
private void dataGridView1_Paint(object sender, PaintEventArgs e)
{
dataGridView1.Rows[0].DefaultCellStyle.BackColor = Color.Red;
}
这对我很有用 - 当您更改选项卡时,paint事件会多次被调用,因此如果您只想设置DefaultCellStyle,则可以执行以下操作:
public partial class Form1 : Form
{
private bool setcol;
private bool painted;
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
setcol = true;
painted = false;
}
private void dataGridView1_Paint(object sender, PaintEventArgs e)
{
if (setcol && !painted)
{
painted = true;
dataGridView1.Rows[0].DefaultCellStyle.BackColor = Color.Red;
}
}
}