Изменить текстовое значение кнопки в 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;
            }
        }
Другие вопросы по тегам