2015-01-13 5 views
0

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

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)); 
} 

То, с чем я столкнулся, - каждый раз, когда изменяется текст всех кнопок, если кто-либо меняется. Мне нужны текстовые кнопки только для тех строк, для которых значение изменилось, а не для каждой строки.

ответ

0

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

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

Удалите нижнюю строку из кода, поскольку значение по умолчанию UseColumnTextForButtonValue является ложным.

PORT_BUTTON_DICT[kvp.Key].UseColumnTextForButtonValue = true; 
+0

Все еще не работает. Я уже удалил строку. – Ankur

+0

@Ankur, вы удалили из блока if и else? – Junaith

+0

yes.The текст меняется, но сразу текст кнопки устанавливается пустым. I использовал Thread.Sleep (5000), и я заметил, что текст исчезает сразу после 5 секунд установки текста. – Ankur

 Смежные вопросы

  • Нет связанных вопросов^_^