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分钟,这也太慢了,有没有好点的办法呢,效率快些,还不卡的。求大侠指点!
...全文
347 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用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次.
噢,那只能弄数据源了。比较麻烦,不知道怎样,在数据源中删除选定的行号。

111,094

社区成员

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

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

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