找回密码
 立即注册

QQ登录

只需一步,快速开始

vbagcl

初级会员

24

主题

100

帖子

210

积分

初级会员

积分
210

活字格认证微信认证勋章

vbagcl
初级会员   /  发表于:2013-1-23 10:11  /   查看:9690  /  回复:7
我写个小程序,里面有SPREAD控件及C1FLEXGRID控件。
往SPREAD与C1FLEXGRID控件的赋值方式及赋值的行数和列数是一样的,但是我发现一个问题。
在SPREAD里赋值所消耗的时间是于赋值的行数和列数,而在C1FLEXGRID里赋值消耗的时间在于赋值字符串的大小。
好奇怪,因为在我们所作的系统中使用的是C1FLEXGRID控件,查询的数据只有30行左右,列数是70多列,耗时达10多秒。
不知道在C1FLEXGRID是否可以像SPREAD一样耗时是根据的行数和列决定呢。

因为在用户的眼里查询数据的行数和列数才是最根本的数据量,而不是每个数据单元的字符串的长度。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

7 个回复

倒序浏览
iceman
社区贡献组   /  发表于:2013-1-23 15:07:00
沙发
回复 1楼vbagcl的帖子

vbagcl 你好,

C1FlexGrid 相对来说性能较高,建议使用数据源赋值,请使用以下代码对比:
Spread

  1. ss1_Sheet1.Rows.Count = 888;

  2.             DataTable dt = new DataTable();
  3.             for (int i = 0; i < ss1_Sheet1.Columns.Count; i++)
  4.             {
  5.                 dt.Columns.Add(new DataColumn("第" + i.ToString() + "列"));
  6.             }
  7.             for (int i = 0; i < this.ss1_Sheet1.Rows.Count; i++)
  8.             {
  9.                 dt.Rows.Add();
  10.             }
  11.             for (int i = 0; i < ss1_Sheet1.Columns.Count; i++)
  12.             {
  13.                 for (int j = 0; j < this.ss1_Sheet1.Rows.Count; j++)
  14.                 {
  15.                     dt.Rows[j][i] = "1234567890123456";
  16.                 }
  17.             }
  18.             this.ss1_Sheet1.DataSource = dt;
  19.             c1ss1.Redraw = true;
复制代码


C1FlexGrid

  1. c1ss1.Rows.Count = 888;
  2.             c1ss1.Redraw = false;
  3.             DataTable dt = new DataTable();
  4.             for (int i = 0; i < c1ss1.Cols.Count; i++)
  5.             {
  6.                 dt.Columns.Add(new DataColumn("第" + i.ToString() + "列"));
  7.             }
  8.             for (int i = 0; i < this.c1ss1.Rows.Count; i++)
  9.             {
  10.                 dt.Rows.Add();
  11.             }
  12.             for (int i = 0; i < c1ss1.Cols.Count; i++)
  13.             {
  14.                 for (int j = 0; j < this.c1ss1.Rows.Count; j++)
  15.                 {
  16.                     dt.Rows[j][i] = "1234567890123456";
  17.                 }
  18.             }

  19.             this.c1ss1.DataSource = dt;
  20.             c1ss1.Redraw = true;
复制代码
回复 使用道具 举报
vbagcl
初级会员   /  发表于:2013-1-23 16:57:00
板凳
多谢,效率提高很多。
但是,写上数据后,不能重新写。
请指点,多谢!
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2013-1-23 18:12:00
地板
回复 3楼vbagcl的帖子

请问重新写指的是?
回复 使用道具 举报
vbagcl
初级会员   /  发表于:2013-1-26 20:57:00
5#
不好意思,这几天比较忙,没有及时回复。
我说的重新写的意思是:画面上有两个BUTTON,BUTTON1将dt(DataTable dt)的值写入c1flexgrid(c1flexgrid.datasource=dt)。
BUTTON2执行:c1flexgrid.rows.count=1;
程序就会报错!
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2013-1-28 11:48:00
6#
回复 5楼vbagcl的帖子

你好,
在绑定模式下,无法通过 c1flexgrid.rows.count=1; 删除行,可以通过更改数据源删除行,例如

  1. dt.Rows.RemoveAt(2);
复制代码
回复 使用道具 举报
vbagcl
初级会员   /  发表于:2013-1-30 08:46:00
7#
谢谢,问题解决!
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2013-1-30 11:39:00
8#
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部