持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第9天,点击查看活动详情
概述:
之前的章节,我们实现了一个温湿度软件的基本功能。并已经功能的把数据存储到数据库中。
本章节,我们将会利用winform的表格控件和定时器控件来实现数据的自动采集和入库。
修改界面
修改界面,增加表格控件。
开发form1的设计器。修改界面。
我们在工具中搜索data,找到datagridview,拖入窗体中。
最终修改完毕的界面如下图:
增加一个定时器
在工具中搜索timer,找到tiemer控件,并拖入窗体
完成后如下;
我们修改timer的属性:
其中,interval表示定时器重载时间,单位ms,我们定时10s,输入10000
enabled表示是否初始化就启动定时器,我们选择true
点击timer1,自动生成到点回调函数
/// <summary>
/// 定时器回调
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void timer1_Tick(object sender, EventArgs e)
{
}
初始化表格
表格的初始化,需要在load函数中完成。这样我们加载完界面,表格就显示出来了。
datagridview的初始化主要是初始化表头信息。
首先声明一个全局的datatable变量,作为表格的数据源。\
/// <summary>
/// 数据缓存
/// </summary>
private DataTable DataBuffer = null;
/// <summary>
/// 序号
/// </summary>
private int Index = 0;
初始化datatable数据源
/// <summary>
/// 初始化结构
/// </summary>
private void InitDataTable()
{
DataBuffer = new DataTable();
DataBuffer.Columns.Add("ID");
DataBuffer.Columns.Add("温度");
DataBuffer.Columns.Add("湿度");
DataBuffer.Columns.Add("时间");
}
初始化表格
/// <summary>
/// 初始化表格
/// </summary>
private void InitDataGrid()
{
//自适应列宽
dataGridView1.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.AllCells);
//绑定数据到DataGridView
dataGridView1.DataSource = DataBuffer;
//不显示最后一个行
dataGridView1.AllowUserToAddRows = false;
dataGridView1.ReadOnly = true;
//去除首列
dataGridView1.RowHeadersVisible = false;
//刷新
dataGridView1.Refresh();
}
load函数调用初始化
注意先调用buffer初始化,再调用表格初始化
//初始化数据
InitDataTable();
InitDataGrid();
实现定时器到点事件
/// <summary>
/// 定时器回调
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void timer1_Tick(object sender, EventArgs e)
{
if (Runport.IsOpen)
{
//获取地址
byte addr = byte.Parse(this.textBox1.Text);
string ret = THSensor.ReadTHDataFromSensor(Runport, addr);
if (!string.IsNullOrEmpty(ret))
{
string temp = ret.Split('&')[0];
string humi = ret.Split('&')[1];
//入库操作
DB_SerAPI.SaveTHData(temp, humi);
//刷新列表
string time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
if (DataBuffer != null)
{
Index++;
DataRow row = DataBuffer.NewRow();
row["ID"] = Index.ToString();
row["时间"] = time;
row["温度"] = temp;
row["湿度"] = humi;
DataBuffer.Rows.Add(row);
}
}
else
{
MessageBox.Show("无数据,请检查配置参数");
}
}
}
测试
下一章节,我们将实现利用charts 控件,实现实时曲线的显示