0

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

我面临的是每次所有按钮的文本都发生变化时,如果有任何一个发生变化。我只希望那些值发生变化的行的按钮文本,而不是每一行。

4

1 回答 1

0

UseColumnTextForButtonValueproperty 设置为 true 表示该Text属性的值用作按钮值。如果设置为 false,则每个单元格的值都会显示在按钮上。

在您的代码中,它设置为 true。因此,每当您更改Text属性值时,所有行都会更新。

从您的代码中删除以下行,因为默认值为UseColumnTextForButtonValuefalse。

PORT_BUTTON_DICT[kvp.Key].UseColumnTextForButtonValue = true;
于 2015-01-13T14:03:34.587 回答