找回密码
 立即注册

QQ登录

只需一步,快速开始

lzh3452

银牌会员

32

主题

188

帖子

3914

积分

银牌会员

积分
3914

活字格认证

lzh3452
银牌会员   /  发表于:2011-10-9 14:54  /   查看:8392  /  回复:9
我现在有一个Spread,从DB中检索数据,然后用Spread显示,原来的方法是对每一条数据进行一次行追加,并处理每一个字段的格式。但是速度很慢,尤其是大量数据时,客户那里出现过追加了一个半小时才结束的现象。
1、由于原来就有绑定了一个DataTable,所以我想是不是也可以把检索出来的数据直接绑定到Spread上,而不是一行一行的追加?
2、如果可以,那么我有一列是日期,DB中存的是“YYYYMMDD”这样的,显示时想变成“YYYY/MM/DD”的形式,有没有快捷的方法可以一次设置整列的格式?
3、对于DB检索的数据中,如果出现的了Null,Spread会怎么处理?

9 个回复

倒序浏览
iceman
社区贡献组   /  发表于:2011-10-9 18:03:00
沙发

回复 1# lzh3452 的帖子

你好:
1. 可以先从数据源中取出所有需要数据,然后一次性绑定到 Spread 。
2. 可以通过 DateTimeCellType 类下的 Format 方法实现自定义显示格式。
3. 如果数据源中没有值,Spread 对应单元格中将不会显示任何内容。
回复 使用道具 举报
lzh3452
银牌会员   /  发表于:2011-10-11 09:06:00
板凳

回复 2# iceman 的帖子

你好,能提供一下例子么?关于第二点,我设置过这个东西,不过虽然设置的是“YYYY/MM/DD”,但是如果我给Spread赋值的不是这个格式,他就不显示。还有,如果我给的值是“YYYY/MM/DD”的格式,那么当我再取的时候,取到的Value或者Text会是什么格式?
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2011-10-11 11:18:00
地板
你好,Value 值为系统默认日期格式,Text 值为自定义日期格式。我做了一个简单的Demo ,代码如下:
  1.         private void Form1_Load(object sender, EventArgs e)
  2.         {
  3.             //设置数据源
  4.             DataTable dbTable = new System.Data.DataTable();
  5.             DataColumn colDateTime = new System.Data.DataColumn("Date", System.Type.GetType("System.DateTime"));
  6.             dbTable.Columns.Add(colDateTime);
  7.             dbTable.Rows.Add("12/01/2011");
  8.             dbTable.Rows.Add("12/01/2011");
  9.             dbTable.Rows.Add("12/01/2011");
  10.             dbTable.Rows.Add("12/01/2011");
  11.             dbTable.Rows.Add(System.DateTime.Now);
  12.             dbTable.Rows.Add(System.DateTime.Now);
  13.             dbTable.Rows.Add(System.DateTime.Now);
  14.             dbTable.Rows.Add(System.DateTime.Now);
  15.             this.fpSpread1.Sheets[0].DataSource = dbTable;
  16.             this.fpSpread1.Sheets[0].Columns[0].Width = 200;
  17.             
  18.         }

  19.         private void btnChangeFormat(object sender, EventArgs e)
  20.         {
  21.             //设置自定义日期格式
  22.             FarPoint.Win.Spread.CellType.DateTimeCellType dateType = new FarPoint.Win.Spread.CellType.DateTimeCellType();
  23.             DateTime a = new DateTime();
  24.             dateType.DateSeparator = "/";
  25.             dateType.UserDefinedFormat = "yyyy/MM/dd";
  26.             dateType.DateTimeFormat = FarPoint.Win.Spread.CellType.DateTimeFormat.UserDefined;
  27.             this.fpSpread1.Sheets[0].Columns[0].CellType = dateType;
  28.             MessageBox.Show(this.fpSpread1.Sheets[0].Cells[0, 0].Value.ToString());
  29.             MessageBox.Show(this.fpSpread1.Sheets[0].Cells[0, 0].Text);
  30.         }
复制代码
回复 使用道具 举报
lzh3452
银牌会员   /  发表于:2011-10-25 09:02:00
5#

回复 4# iceman 的帖子

不对不对,不是要这样的,这样我也可以,现在的问题是,取得的数据没有“/”也就是你的Form_Load方法里的Add的参数就是“20111201”,我希望的是,用这个字符串赋值,然后显示在Spread上的是“2011/12/01”,而且通过ActiveSheet.GetText方法取到的是“2011/12/01”。
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2011-10-25 10:13:00
6#

回复 5# lzh3452 的帖子

你好,
我使用 DateTime 类型添加数据"20111201"时显示数据无效.
请问你用的是什么类型的数据库?
数据库的存储"20111201"列的单元格类型是什么?
回复 使用道具 举报
lzh3452
银牌会员   /  发表于:2011-11-1 14:23:00
7#

回复 6# iceman 的帖子

现在的单元格类型是Text,我也是试了一下,结果是无效的数据。
这是一个共同的检索画面,好多个地方都用到了,因为其他的地方原来的检索用的SQL是没有格式化的,所以出来的就是“20111201”这样的日期格式。而原来是用逐行添加,每个单元格单独处理的方式向Spread中加数据的。所以格式直接在赋值前就可以改成“2011/12/01”这样的格式。
不过现在客户说这种方式太慢了,几千条的时候还凑合,二三十秒就好了,不过要是几十万条数据的时候,要等几个小时才能加完。
所以我就改成用Merge方法一次性追加数据,但现在就不能把“20111201”变成“2011/12/01”了。如果改SQL,影响的就会很大,所以想能不能在Spread上做修改,让他自己完成这件事。
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2011-11-2 14:36:00
8#
你好,Spread 目前不支持此功能。给你带来不便,十分抱歉。
回复 使用道具 举报
lzh3452
银牌会员   /  发表于:2011-11-2 17:26:00
9#

回复 8# iceman 的帖子

:smoke 真可惜啊!那就只能每个画面都改一下了!
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2011-11-2 18:00:00
10#

回复 9# lzh3452 的帖子

:share: 加油~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部