datagridview随窗体变化而变化的方式

198799com 2010-11-26 01:56:13
第一:在项目测试中 datagridview.DataSource =DataTable;方式填充数据 窗体大小基本都是900×800的大小
通过下面任意一种方式设置datagridview:在加载datagridview的时候 数据一条一条的下来(加载),用下拉滚动条 如果拉快点,那跟刷屏差不多 郁闷!
测试的时候就300条数据 后来删除只有2条数据也是一样的,后来随便拖了一个界面加一个datagridview测试 其他的都不设置 一下子就加载了 没有出现问题,只是下拉的时候 如果快点 还跟刷屏一样,我想问下 各位有没有遇到这样的问题 遇到是怎么解决的? 在线急等............................................
this.dataGridView1.Dock = System.Windows.Forms.DockStyle.Fill;

或者

this.dataGridView1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));

还有一点注意:都说winfrom程序加载页面耗内存,在测试过程中也看啦任务管理器 在项目中 填充数据的对象基本都clear啦。 再说下我测试的电脑配置: 分辨率1280*800 集成显卡 酷睿 1.6HZ 2G内存(DDR2) (台式) 1024*768独立 2.0HZ 2G内存(DDR2)(笔记本) 都出现上面的问题!!
...全文
606 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
cxx1997 2010-11-26
  • 打赏
  • 举报
回复
图片列 是IMAGECOLUMN 比较重,你如果自己创建列,就会小很多
198799com 2010-11-26
  • 打赏
  • 举报
回复
其实使用加载的图片列 里面根本就没有任何值 都是系统默认的
198799com 2010-11-26
  • 打赏
  • 举报
回复
我再试试看 我就用3列 1W行条数据吧看看
cxx1997 2010-11-26
  • 打赏
  • 举报
回复
如果 我开发了datagridview,你要求我在datagridview中能处理你这个问题
我的想法是这样:
提供2中绘制单元格的方式,一种 是重量级的完全绘制,一种是轻量级的快速绘制(比如图片之绘制一部分)
然后判断当前GRID的状态,如果处于下拉或者刷新频繁的时候,用轻量级的快速绘制,如果处于稳定状态,就采用重量级的完全绘制

具体的需要重写grid的单元格的方式,并处理下拉事件。。。。

198799com 2010-11-26
  • 打赏
  • 举报
回复
能用分页 就好了 关键是我们做的程序 经理不要分页呀
198799com 2010-11-26
  • 打赏
  • 举报
回复
问题解决了 我再加分
cxx1997 2010-11-26
  • 打赏
  • 举报
回复
你试过listview 没这个问题吗?

我觉得不是加载的时候的问题,加载的数据量太大只是占用了内存
你快速下拉时,每拉一行,GIRDVIEW都要重绘自己,而你的IMAGE等字段绘制消耗的资源太多

要不你别让用户下拉,直接让用户输入跳转到第几行,然后直接定位到哪行

所以这个问题的本质,不应该让用户直接看到这么多数据,用分页技术
198799com 2010-11-26
  • 打赏
  • 举报
回复
有25列数据 有imag列和pdf列 基本上面都是放一个图片 这个我觉得没有什么问题 关键是我有100多个页面 几百个datagridview 每一个页面数据也不一样 唉 早知道用listview

我觉得问题的关键是 原始页面加载上有问题
cxx1997 2010-11-26
  • 打赏
  • 举报
回复
再次测试,和 界面上的文字量有关系,如果字段里的值都是空的就没影响
如果字段里面的值比较大,问题就比较严重

应该是 CELL绘制 耗用资源太多
初步思路:
1:分页
2:重绘CELL,将大字符串的值 简化处理
cxx1997 2010-11-26
  • 打赏
  • 举报
回复
恩,27000行,有TEXT字段的情况,拖拉会CPU占到100%卡死
cxx1997 2010-11-26
  • 打赏
  • 举报
回复
我测试的4750行,拖拉没问题

你有多少列??

列里面有OLE、IMAGE之类的吗?
198799com 2010-11-26
  • 打赏
  • 举报
回复
测试过了 好像也不行 虚拟模式也是一样的
一切为了你 2010-11-26
  • 打赏
  • 举报
回复
DataTable dt = MobaoHis.Bll.JieBan.GetJieBan(area,jieId,beg,end);
dgvlist.Rows.Clear();
if (dt.Rows.Count > 0)
{
for (int i = 0; i < dt.Rows.Count; i++)
{
dgvlist.Rows.Add();
int num = dgvlist.Rows.Count - 1;
DataGridViewRow row = dgvlist.Rows[num];
DataRow dr= dt.Rows[i];
row.Cells["Id"].Value = dr["Id"].ToString();
row.Cells["AreaId"].Value =GetAreaId.ChangeBelong_dpid(dr["AreaId"].ToString());
row.Cells["sum"].Value = dr["zongshu"].ToString();
.....
一切为了你 2010-11-26
  • 打赏
  • 举报
回复
我绑定这个控件 不用数据源

110,539

社区成员

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

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

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