Изменить текстовое значение кнопки в DataGridViewButtonColumn
Я пытаюсь изменить текст кнопки в DataGridViewButtonColumn при каждом нажатии кнопки.
Я определяю столбец так:
DataGridViewButtonColumn sitemapButtonColumn = new DataGridViewButtonColumn
{
Name = "Process",
Text = "Start",
UseColumnTextForButtonValue = true,
DataPropertyName = "Process",
FillWeight = 7,
Width = 75
};
dg_list.CellContentClick += dg_list_StartStopProcessClick;
Теперь функция, которая управляет событием после нажатия на ячейку:
private void dg_list_StartStopProcessClick(object sender, DataGridViewCellEventArgs e)
{
var senderGrid = (DataGridView)sender;
if (senderGrid.Columns[e.ColumnIndex] is DataGridViewButtonColumn &&
e.RowIndex >= 0 &&
e.ColumnIndex == dg_lista_blogs_automatizacion.Columns["Process"].Index)
{
if (senderGrid.Rows[e.RowIndex].Cells[e.ColumnIndex].Value.ToString() == "Start")
{
senderGrid.Rows[e.RowIndex].Cells[e.ColumnIndex].Value = "Stop";
senderGrid.Rows[e.RowIndex].Cells[e.ColumnIndex].Style.BackColor = Color.OrangeRed;
}
else
{
senderGrid.Rows[e.RowIndex].Cells[e.ColumnIndex].Value = "Start";
senderGrid.Rows[e.RowIndex].Cells[e.ColumnIndex].Style.BackColor = Color.White;
}
}
}
Ну, это не работает!
Я гуглил и нашел сообщение, которое изменяет UseColumnTextForButtonValue на false, устанавливает новое текстовое значение и снова устанавливает значение true.
Проблема в том, что я не могу понять, как я могу получить доступ к свойству UseColumnTextForButtonValue в событии.
Любая помощь?
1 ответ
В принципе, я мог бы решить проблему, установив UseColumnTextForButtonValue в false в экземпляре DataGridViewButtonColumn.
Если для UseColumnTextForButtonValue установлено значение false, текстовое значение кнопки должно быть инициировано в другом событии. Итак, я использую событие CellFormatting для установки значения текста в соответствии с желаемым состоянием.
private void dg_list_auto_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
if (e!=null && e.ColumnIndex==0)
{
dg_list_auto.Rows[e.RowIndex].Cells[0].Value = dg_list_auto[e.RowIndex].flag_sitemap_started?"Stop":"Start";
dg_list_auto.Rows[e.RowIndex].Cells[0].Style.BackColor = dg_list_auto[e.RowIndex].flag_sitemap_started ? Color.IndianRed: Color.GreenYellow;
}
}