Каков наилучший способ изменения цвета некоторых строк в 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 , но для меня это излишне - оно срабатывает пару сотен раз за короткое время, даже когда вы наводите указатель мыши на представление данных, пока янужно сделать это только один раз.
Есть ли у вас какие-либо советы, как решить эту проблему?
С уважением,
Марцин