您的位置:首页 > 编程语言 > C#

c# datagridview 中DataSource的使用总结

2017-01-04 11:23 417 查看
由于当前项目的窗体更新使用的是订阅事件的方式。其中有个datagridview 动态显示统计数据的列表框。本来想用textbox显示,但不规则,看起来也不美观,改由dgv显示。

我没打算用改dgv表的方式更新表内数据,涉及到检索重复等相关的要求,比如第一个事件 把某个产品加入,第二个事件来之后如果是跟第一个事件产品一样,在这个产品数加1,若不一样则另起一行。每次事件都要检索对比一次,导致效率降低

因为我已经对这些操作在前道里边通过list做了判断。所以在dgv里边在做一次重复操作显然多此一举,我需要 的是直接把打好的包 通过datasource的方式传递给dgv。

在实践过程中,涉及到几个问题;

第一,数据源不能是普通的list ,要用到bindinglist 或者bindingsource方法,最终觉得BindingSource 的方式最好。

第二,bingdinglist 直接赋值给dgv.DataSource ,dgv窗体不显示更新,尽管数值已经改变,但窗体就是不反应, bingdinglist.refresh 或者reset 也没什么用。这里边的探索没有进一步深入,因为最终用bindingsource解决

代码很简单

void OnOverTopInOrderForm(ReOverTopinOrderArgs e)    //接收事件
{

BindingSource bs = new BindingSource();
if (dgvovertop.InvokeRequired)
{
dgvovertop.BeginInvoke(new MethodInvoker(delegate
{
ReOverTopinOrder reovre;//= new ReOverTopinOrder();
foreach (var item in e.Reovertopinorderlist)
{
reovre = new ReOverTopinOrder();
reovre.卷烟名称 = item.卷烟名称;
reovre.已扫数量 = item.已扫数量;
//reovertb_list.Add(reovre);
//reovertb_list.
bs.Add(reovre);
}
dgvovertop.DataSource= bs;     //赋值控件自动更新

//var  dt=  dgvovertop.DataSource as BindingList<ReOverTopinOrder>;
// dt.
//      reovertb_list = e.Reovertopinorderlist;
//     dgvovertop.Refresh();
//  reovertb_list.ResetBindings();
//  bdlst.AddingNew
//    dgvovertop.DataSource = mess;
//  reovertb_list.Add(reovre);
}));
}
else
{
//   dgvovertop.DataSource = mess;
}

//    dgvovertop.Refresh();
//   reovertb_list.ResetBindings();
//    ControlHelper.ShowDgvControl1(dgvovertop);
//     reovertb_list = e.Reovertopinorderlist;
}


一下是参考文章
http://www.cnblogs.com/monkeyZhong/p/4530795.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: