Как изменить текст ячейки кнопки 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;