C#& SQL:如何在不刷新DataGridView的情况下更新表?

时间:2015-10-16 06:00:24

标签: c# datagridview sql-update

我总是使用

DataGridView.DataSource = (DataTable)tbl; 

但是这个方法完全刷新了Datagridview,比如selectrows,滚动条位置,backColor等。我只想更新SQL中的单元格数据,而不是完整的datagridview刷新

例如,uTorrent有一个像datagridview的表,在某些单元格中,x KB / s值总是刷新,但torrentdatagrid是静态的。没有滚动移动,没有选择消失等。

你能帮我这么做吗?

对不起我的英语不好。感谢。

2 个答案:

答案 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。感谢