datagridview 大批量删除选中太慢了,怎么优化一下,求高手指点一下。

红蜻蜓888_r1i 2014-05-23 01:27:47



private void btn_selectitems_Click(object sender, EventArgs e)
{
this.dg_bt.Invoke((MethodInvoker)delegate()
{
for (int i = this.dg_bt.SelectedRows.Count; i > 0; i--)
{
dg_bt.Rows.RemoveAt(dg_bt.SelectedRows[i - 1].Index);
if (i % 10 == 0) Application.DoEvents();
}
});
}


我这种方法好慢,界面还是有点卡,如果不加处理事件,更卡的不像样了。删除几万条数据,我测试估计得20分钟,这也太慢了,有没有好点的办法呢,效率快些,还不卡的。求大侠指点!
...全文
365 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
於黾 2014-05-23
  • 打赏
  • 举报
回复
如果修改数据源也会导致datagridview刷新的话,可以先将datagridview的数据源置为null 等datatable刷新完了,重新绑定一下 这样不管你删除多少条数据,前台datagridview就只刷新2次.
於黾 2014-05-23
  • 打赏
  • 举报
回复
因为datagridview是每更新一次就刷新一次,必然慢. 你在后台直接对数据源进行操作,然后datagridview就只刷新一次
於黾 2014-05-23
  • 打赏
  • 举报
回复
dg_bt是什么?datagridview? 数据操作不要直接操作前台datagridview,你去删除后台的datatable,然后将datatable重新绑定到datagridview.
於黾 2014-05-23
  • 打赏
  • 举报
回复
前面说的就是后台数据源datatable啊. 难道你将数据源理解为数据库?
SeeYou孙悟空 2014-05-23
  • 打赏
  • 举报
回复
引用 10 楼 Z65443344 的回复:
[quote=引用 9 楼 moranhuoshou 的回复:] 这个情况,我去年的时候有遇见过。楼上说操作后台快,的确,是非常快,秒秒钟的事情。 难道前台就无法快吗? 是可以快的。 楼主,你用的是Removeat方法,这个最好是不要用的,因为你removeat 一下,gridview就会重新 排序一下index,这样会导致 gridview 非常慢,卡 ,你这里数据还很少,你试试100条以上就感觉到了。 那应该怎么搞呢?具体的话,代码是的确忘记了,1年多了,大概思路我还记得。 你用remove 操作datatalbe,然后 把操作datatable的操作全部完成后,再AcceptChanges(); 然后重新绑定到gridview 就可以了 。 希望能帮到你。
还不是一样要操作datatable...datatable是前台控件,能看见?[/quote] 这又不是UI,当然看不见。我的意思是,看楼主的图片,里卖的数据都是乱的,假的,我估计不是从数据库里读的,而是直接add进gd,何必和我较真。。。。如果是add进去的,一样可以取到datatable 来操作。
於黾 2014-05-23
  • 打赏
  • 举报
回复
引用 9 楼 moranhuoshou 的回复:
这个情况,我去年的时候有遇见过。楼上说操作后台快,的确,是非常快,秒秒钟的事情。 难道前台就无法快吗? 是可以快的。 楼主,你用的是Removeat方法,这个最好是不要用的,因为你removeat 一下,gridview就会重新 排序一下index,这样会导致 gridview 非常慢,卡 ,你这里数据还很少,你试试100条以上就感觉到了。 那应该怎么搞呢?具体的话,代码是的确忘记了,1年多了,大概思路我还记得。 你用remove 操作datatalbe,然后 把操作datatable的操作全部完成后,再AcceptChanges(); 然后重新绑定到gridview 就可以了 。 希望能帮到你。
还不是一样要操作datatable...datatable是前台控件,能看见?
SeeYou孙悟空 2014-05-23
  • 打赏
  • 举报
回复
这个情况,我去年的时候有遇见过。楼上说操作后台快,的确,是非常快,秒秒钟的事情。 难道前台就无法快吗? 是可以快的。 楼主,你用的是Removeat方法,这个最好是不要用的,因为你removeat 一下,gridview就会重新 排序一下index,这样会导致 gridview 非常慢,卡 ,你这里数据还很少,你试试100条以上就感觉到了。 那应该怎么搞呢?具体的话,代码是的确忘记了,1年多了,大概思路我还记得。 你用remove 操作datatalbe,然后 把操作datatable的操作全部完成后,再AcceptChanges(); 然后重新绑定到gridview 就可以了 。 希望能帮到你。
於黾 2014-05-23
  • 打赏
  • 举报
回复
datatable.Rows.RemoveAt() 其实用法是一样的
jimil 2014-05-23
  • 打赏
  • 举报
回复
delete from table where id in (1,2,3,5,6,9,122) 拼成这样就可以了。
enaking 2014-05-23
  • 打赏
  • 举报
回复
1楼和2楼方法都可以
  • 打赏
  • 举报
回复
获取选定的行,根据id拼接sql语句,执行后重新绑定数据源。
红蜻蜓888_r1i 2014-05-23
  • 打赏
  • 举报
回复
引用 3 楼 Z65443344 的回复:
如果修改数据源也会导致datagridview刷新的话,可以先将datagridview的数据源置为null 等datatable刷新完了,重新绑定一下 这样不管你删除多少条数据,前台datagridview就只刷新2次.
噢,那只能弄数据源了。比较麻烦,不知道怎样,在数据源中删除选定的行号。
具有不完整信息的DSGE模型的鲁棒预测研究(Matlab代码实现)内容概要:本文围绕“具有不完整信息的DSGE模型的鲁棒预测研究”展开,结合Matlab代码实现,探讨了在宏观经济建模中如何应对信息不完整情况下的预测不确定性。通过构建包含不确定参数和外生冲击的动态随机一般均衡(DSGE)模型,引入鲁棒控制理论以增强模型对模型设定风险的抵抗能力,从而提高经济政策模拟与预测的可靠性。文中详细展示了模型的数学推导、状态空间表达、Kalman滤波估计及鲁棒性调整的技术细节,并提供了完整的Matlab仿真代码,便于读者复现结果并应用于实际经济分析场景。; 适合人群:具备宏观经济学基础和一定Matlab编程能力的研究生、科研人员及从事经济政策分析的专业人士;熟悉计量经济学与动态系统建模的高年级本科生亦可参考学习。; 使用场景及目标:①用于宏观经济预测与政策评估,特别是在数据缺失或模型不确定性较高的情境下提升预测稳健性;②服务于学术研究与论文复现,帮助理解DSGE模型与鲁棒控制方法的结合机制;③为金融与政府机构提供决策支持工具的开发基础。; 其他说明:资源配套提供完整Matlab代码与仿真文件,建议结合文档与代码同步学习,重点关注状态估计、滤波算法与鲁棒优化模块的设计逻辑,以深入掌握模型实现的核心技术路径。

111,120

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧