我总是使用
DataGridView.DataSource = (DataTable)tbl;
但是这个方法完全刷新了Datagridview,比如selectrows,滚动条位置,backColor等。我只想更新SQL中的单元格数据,而不是完整的datagridview刷新
例如,uTorrent有一个像datagridview的表,在某些单元格中,x KB / s值总是刷新,但torrentdatagrid是静态的。没有滚动移动,没有选择消失等。
你能帮我这么做吗?
对不起我的英语不好。感谢。
答案 0 :(得分:1)
如果您的表具有主键,并且您只想更新现有/添加新行,则可以使用DataTable.Merge Method,如下所示:
首先
dataGridView.DataSource = initial_data_table;
更新
((DataTable)dataGridView.DataSource).Merge(new_data_table);
UPDATE:上面的方法最简单,但正如评论中所提到的,由于Merge
方法优化可以抑制操作和提升过程中的更改通知,因此会产生副作用最后ListChanged
的{{1}}事件。因此,基于DataTable.LoadDataRow Method:
ListChangedType.Reset
一个证明:
的样本foreach (var dataRow in newTable.AsEnumerable())
table.LoadDataRow(dataRow.ItemArray, LoadOption.OverwriteChanges);
答案 1 :(得分:0)
也许我懒得解释问题。对不起。但是,这段代码解决了我的问题,
for (int i = 0; i < dg.Rows.Count; i++)
{
for (int j = 1; j < dg.Columns.Count ; j++)
{
dg.Rows[i].Cells[j].Value = NewDataTable.Select("ID=" + dg.Rows[i].Cells[0].Value)[0][j].ToString();
}
}
第一列是ID主键列。我通过计时器更新并实时将数据传递到我的datagridview。感谢