如何在每次更新Datasource时更改Datagridview Button Cell的文本

时间:2015-01-13 12:08:26

标签: c# datagridview datagridviewbuttoncolumn

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

我所面对的是每当所有按钮的文本发生任何变化时,它都会发生变化。我想只为那些值改变的行按钮文本而改变,而不是每一行。

1 个答案:

答案 0 :(得分:0)

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

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

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

PORT_BUTTON_DICT[kvp.Key].UseColumnTextForButtonValue = true;