【问题标题】:Insert Mosquitto Message into dataGridView将 Mosquitto 消息插入 dataGridView
【发布时间】:2020-03-30 20:06:50
【问题描述】:

您好,我有一个应用程序通过 Mosquitto Broker 将带有值的消息从一个传感器发送到 C# 中的另一个应用程序。 对于每个主题,我有 3 个主题“topicTemperature、topicHumidity 和 topicBatery”,消息是带有“sensorID SensorValue Date”的字符串我有一个 dataGridView,其中包含以下列“ID、温度、湿度、电池和日期”。 消息示例:

"2 22.3 04/12/2019"  //TopicTemperature
"2 47.9 04/12/2019"  //TopicHumidity
"2 99 04/12/2019"  //TopicBatery

我有这个代码:

    string[] data;
    if (String.Equals(e.Topic, "topicTemperature")){
        data = Encoding.UTF8.GetString(e.Message).Split(null);
        dataGridView1.Rows.Add(data[0], data[1]);
    }

   if (String.Equals(e.Topic, "topicHumidity")){
       data = Encoding.UTF8.GetString(e.Message).Split(null);
       dataGridView1.Rows.Add(data[1]);
   }

   if (String.Equals(e.Topic, "topicBatery")){
      data = Encoding.UTF8.GetString(e.Message).Split(null);
      dataGridView1.Rows.Add(data[1], data[2]);
   }

这是输出:

我想要这个输出:

我需要进行哪些更改才能使其正常工作?

编辑:使用 Jacobs 代码输出

【问题讨论】:

  • 3 条消息是否总是按特定顺序出现?
  • 与消息示例的顺序相同:

标签: c# mosquitto messagebroker


【解决方案1】:

我认为您最好的选择是首先创建行,然后添加您的值。这样您就可以控制每条数据插入到哪一列。

编辑:下面的代码给了我下图的输出。我不得不使用你给我的输入,因为我没有传感器,但这应该是你需要的相同概念。

        int rowNum = dataGridView1.Rows.Add();

        string temp = "2 22.3 04/12/2019";
        string humid = "2 47.9 04/12/2019";
        string batery = "2 99 04/12/2019";

        DataGridViewRow row = dataGridView1.Rows[rowNum];

        string[] data;
        if (String.Equals(temp,temp))
        {
            data = temp.Split(null);
            row.Cells["SensorID"].Value = data[0];
            row.Cells["Temperature"].Value = data[1];
        }

        if (String.Equals(humid, humid))
        {
            data = humid.Split(null);
            row.Cells["Humidity"].Value = data[1];
        }

        if (String.Equals(batery, batery))
        {
            data = batery.Split(null);
            row.Cells["Batery"].Value = data[1];
            row.Cells["Date"].Value = data[2];
        }

您将需要循环创建行,但这应该给出一个想法。

【讨论】:

  • 我试过了,输出是link
  • 链接不去任何地方。
  • 输出是:在第一行,我只有 ID 和温度的值;第二行全是空白;在第三行,我只有湿度值;在第四行,我只有日期的值;
  • 我有您的代码输出,但是当我将 if 更改为 if (String.Equals(e.Topic, "topicTemperature")) 时,每个传感器的输出仍然是一行,查看 EDIT 中的打印
  • 我想我有点困惑,因为如果你唯一改变的是 if 语句变量,那么它不应该对行产生影响。你能发布更多你当前的代码块吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-10
  • 2016-06-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多