我有一个来自UDP套接字的valueArray [125],并且每20ms更新一次数组。我想在数据网格视图中显示此数组的每个成员。到目前为止,我可以在网格视图上显示数组,但我有几个问题:
1- gridview上没有滚动条,所以我只能看到表格中的前15-20个数据。
2-由于刷新过程,datagridview正在闪烁。
最后我想在"数据"旁边添加一个列。列,这样我就可以看到数组的索引。这是我到目前为止所做的:
public void UpdateGridView(byte[] valueArray)
{
dataGridView.Visible = false;
DataTable dt = new DataTable();
dt.Columns.Add("Data");
for (int j = 0; j < 125; j++)
{
DataRow row = dt.NewRow();
for (int i = 0; i < 1; i++)
{
row[i] = valueArray[j];
}
dt.Rows.Add(row);
dataGridView.DataSource = dt;
}
dataGridView.DataSource = dt;
dataGridView.Visible = true;
}
答案 0 :(得分:0)
闪烁来自于持续隐藏并显示DGV
。
这是一个没有闪烁的版本,其中包含一个显示索引的额外列:
public void UpdateGridView(byte[] valueArray)
{
// dataGridView.Visible = false; // < ==
dataGridView.SuspendLayout(); // < ==
DataTable dt = new DataTable();
dt.Columns.Add("Index"); // < ==
dt.Columns.Add("Data");
for (int j = 0; j < valueArray.Length; j++)
{
DataRow row = dt.NewRow();
row[0] = j; // < ==
row[1] = valueArray[j]; // < ==
//for (int i = 0; i < 1; i++) // < ==
//{ // < ==
// row[i] = valueArray[j]; // < ==
//} // < ==
dt.Rows.Add(row)
// dataGridView.DataSource = dt;
}
dataGridView.DataSource = dt;
dataGridView.ResumeLayout(); // < ==
// dataGridView.Visible = true; // < ==
}
默认情况下,DataGridView
会同时显示ScrollBars
。如果您没有,则将其关闭。要恢复使用这样的设计器或代码:
dataGridView.ScrollBars = ScrollBars.Both; // or..
dataGridView.ScrollBars = ScrollBars.Vertical;
答案 1 :(得分:0)
是的我确实,但我一定忘记在这里发布我的答案。看起来使用它们的名称访问行和列比通过索引访问它们更容易。所以我改变了我的解决方案。首先,我在表单加载时用零填充整个网格,然后在UpgradeGridView函数中,我使用它们的名称直接更改了值。
private void Form1_Load(object sender, EventArgs e)
{
Thread ReceiveThread = new Thread(new ThreadStart(ReceiveUDPData));
comboBox1.Items.Add("04 : Read Input Registers");
ReceiveThread.IsBackground = true;
ReceiveThread.Priority = ThreadPriority.Highest;
ReceiveThread.Start();
Control.CheckForIllegalCrossThreadCalls = false;
dt.Columns.Add("Index");
dt.Columns.Add("Data");
for (int j = 0; j < 125; j++)
{
DataRow row = dt.NewRow();
row[0] = j;
row[1] = 0;
dt.Rows.Add(row);
}
dataGridView.DataSource = dt;
}
public void UpdateGridView(byte[] valueArray)
{
for (int j = 0; j < valueArray.Length; j++)
{
DataRow row = dt.Rows[j];
row["Index"] = j+1;
row["Data"] = valueArray[j];
}
}
说实话,我仍然没有得到它的确切运作方式,但我当时时间确实没有时间,这对我帮助很大。