【问题标题】:How to change text of a Datagridview Button Cell on every update of Datasource如何在每次更新数据源时更改 Datagridview 按钮单元格的文本
【发布时间】:2015-01-13 12:08:25
【问题描述】:

我有一个 c# 应用程序,它从 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));
 }

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

【问题讨论】:

    标签: c# datagridview datagridviewbuttoncolumn


    【解决方案1】:

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

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

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

    PORT_BUTTON_DICT[kvp.Key].UseColumnTextForButtonValue = true;
    

    【讨论】:

    • @Ankur,你是否从 if 和 else 块中删除了?
    • 是的。文本正在更改,但按钮文本立即设置为空白。我使用了 Thread.Sleep(5000),我注意到文本在设置文本 5 秒后消失。
    • 删除this.Invoke(new Action(() => datagridPM.Rows[row_count].Cells[datagridPM.Columns.Count - 1].Value = PORT_BUTTON_DICT[kvp.Key].Text));这一行,因为this.Invoke(new Action(() => datagridPM[datagridPM.Columns.Count - 1, row_count].Value = PORT_BUTTON_DICT[kvp.Key]));中已经设置了值
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多