我有一个c#应用程序从TCP接收数据包,在解析数据包时我在datagridview中创建了一个按钮列。按钮的文本需要根据收到的数据进行更改,即“0' 0' 0收到后,该行的按钮文字必须为“停止”按钮。如果' 1'收到后,该行的按钮文字必须为' START'。总是有多行。 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));
}
我所面对的是每当所有按钮的文本发生任何变化时,它都会发生变化。我想只为那些值改变的行按钮文本而改变,而不是每一行。
答案 0 :(得分:0)
将UseColumnTextForButtonValue
属性设置为true表示Text
属性的值用作按钮值。如果设置为false,则每个单元格的值显示在按钮上。
在您的代码中,它设置为true。因此,每当您更改Text
属性值时,所有行都会更新。
从代码中删除以下行,因为UseColumnTextForButtonValue
的默认值为false。
PORT_BUTTON_DICT[kvp.Key].UseColumnTextForButtonValue = true;