Как изменить текст ячейки кнопки Datagridview при каждом обновлении источника данных

У меня есть приложение aC#, которое получает пакет из TCP и при разборе пакета я создаю столбец кнопки в datagridview. Текст кнопки необходимо изменить в соответствии с полученными данными, т.е. если получено "0", текст кнопки для этой строки должен быть "STOP", а если получено "1", текст кнопки для этой строки должен быть " НАЧНИТЕ'. Всегда есть несколько строк. Источник данных Datagridview обновляется каждые 10 секунд.

 if (port_dict[kvp.Key] == "0")
{
           PORT_BUTTON_DICT[kvp.Key].UseColumnTextForButtonValue = true;
           PORT_BUTTON_DICT[kvp.Key].Text = "START";
           this.Invoke(new Action(() =>datagridPM[datagridPM.Columns.Count - 1, row_count].ReadOnly=false));
           this.Invoke(new Action(() => datagridPM[datagridPM.Columns.Count - 1, row_count].Value = PORT_BUTTON_DICT[kvp.Key]));
           this.Invoke(new Action(() => datagridPM[datagridPM.Columns.Count - 1, row_count].ReadOnly = true));
           this.Invoke(new Action(() => datagridPM.Rows[row_count].Cells[datagridPM.Columns.Count - 1].Value = PORT_BUTTON_DICT[kvp.Key].Text));

 }

 else
 {
           PORT_BUTTON_DICT[kvp.Key].UseColumnTextForButtonValue = true;
           PORT_BUTTON_DICT[kvp.Key].Text = "STOP";
           this.Invoke(new Action(() =>datagridPM[datagridPM.Columns.Count - 1, row_count].ReadOnly=false));
           this.Invoke(new Action(() => datagridPM[datagridPM.Columns.Count - 1, row_count].Value = PORT_BUTTON_DICT[kvp.Key]));
           this.Invoke(new Action(() => datagridPM[datagridPM.Columns.Count - 1, row_count].ReadOnly = true));
           this.Invoke(new Action(() => datagridPM.Rows[row_count].Cells[datagridPM.Columns.Count - 1].Value = PORT_BUTTON_DICT[kvp.Key].Text));
 }

С чем я сталкиваюсь, так это каждый раз, когда меняется текст всех кнопок, если они меняются. Я хочу, чтобы тексты кнопок менялись только для тех строк, для которых изменилось значение, а не для каждой строки.

1 ответ

Настройка UseColumnTextForButtonValue Значение true указывает, что значение Text свойство используется в качестве значения кнопки. Если установлено значение false, то значение каждой ячейки отображается на кнопке.

В вашем коде установлено значение true. Таким образом, всякий раз, когда вы меняете Text Значение свойства все строки обновляются.

Удалите строку ниже из вашего кода в качестве значения по умолчанию UseColumnTextForButtonValue ложно

PORT_BUTTON_DICT[kvp.Key].UseColumnTextForButtonValue = true;
Другие вопросы по тегам