当前位置:  开发笔记 > 编程语言 > 正文

更新基础数据源时刷新DataGridView的最佳方法

如何解决《更新基础数据源时刷新DataGridView的最佳方法》经验,为你挑选了3个好方法。

更新基础数据源时刷新DataGridView的最佳方法是什么?

我经常更新数据源,并希望在发生时向用户显示结果.

我已经得到了这样的东西(并且它可以工作),但是忽略DataGridView.DataSource它似乎不是正确的方式.

List itemStates = new List();
dataGridView1.DataSource = itemStates;

for (int i = 0; i < 10; i++) { 
    itemStates.Add(new ItemState { Id = i.ToString() });
    dataGridView1.DataSource = null;
    dataGridView1.DataSource = itemStates;
    System.Threading.Thread.Sleep(500);
}

GWLlosa.. 49

我自己也碰到了这个.我的建议:如果您拥有数据源的所有权,请不要使用List.使用BindingList.该的BindingList有项目时添加或更改,以及启动事件的DataGridView当这些事件被触发将自动更新.



1> GWLlosa..:

我自己也碰到了这个.我的建议:如果您拥有数据源的所有权,请不要使用List.使用BindingList.该的BindingList有项目时添加或更改,以及启动事件的DataGridView当这些事件被触发将自动更新.


这是一个很好的建议.之后你只需要为datagridview调用.Refresh()来刷新它显示的数据......
可以使用:bindingList.ResetItem(bindingList.IndexOf(item))逐行刷新;
`.Refresh()`只讨论控件重绘,与绑定无关,除非我非常错误!"强制控件使其客户区无效,并立即重绘自身和任何子控件." [Control.Refresh Method](http://msdn.microsoft.com/en-us/library/system.windows.forms.control.refresh.aspx)

2> Alan..:

嗯,它并没有比那更好.正式地说,你应该使用

dataGridView1.DataSource = typeof(List); 
dataGridView1.DataSource = itemStates;

它仍然是一种"清除/重置源"类型的解决方案,但我还没有找到任何可以可靠地刷新DGV数据源的东西.


@GWLlosa,如果您使用自动生成的列并将数据源设置为NULL,它将清除列.通过使用typeof(List),它应该在刷新期间保持列结构.我个人会使用AutoGenerateColumns = false; 并在刷新的第一次传递时创建列.这样,如果用户调整列的大小,则不会在刷新时丢失它们的更改.
@Alan为什么不使用BindingSource然后你可以刷新那么干净整洁而不是重新绑定的东西呢?

3> Alexander Ab..:

在这种情况下,最干净,最有效和范例友好的解决方案是在System.Windows.Forms.BindingSource项目列表(数据源)和您的项目列表中使用a 作为代理DataGridView:

var itemStates = new List();
var bindingSource1 = new System.Windows.Forms.BindingSource { DataSource = itemStates };
dataGridView1.DataSource = bindingSource1;

然后,在添加项目时,使用Add()方法BindingSource而不是列表的Add()方法:

for (var i = 0; i < 10; i++)
{
    bindingSource1.Add(new ItemState { Id = i.ToString() });
    System.Threading.Thread.Sleep(500);
}

这样,您可以将项目添加到列表中,并DataGridView使用相同的代码行通知这些添加项.无需重新设置DataGridViewDataSource每一个你做出改变,以列表的时间.

还值得一提的是,您可以BindingSource直接在Visual Studio的Forms Designer中将表单放到表单上,并将其作为数据源附加到您的表单中DataGridView,这样可以在上面的示例中为您节省一行代码,我手动执行此操作.

推荐阅读
农大军乐团_697
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有