找回密码
 立即注册

QQ登录

只需一步,快速开始

ddyTest

银牌会员

11

主题

28

帖子

2121

积分

银牌会员

积分
2121

活字格认证

ddyTest
银牌会员   /  发表于:2012-8-17 10:05  /   查看:5877  /  回复:7
我使用的是spread 6 for winform,我发现列设置为DateTimeCellType时,如果使用自定义格式"yyyy-MM-dd",Spread中显示的是正确的,如2012-08-17 ,但是绑定的数据源中却是2012-8-17 00:00:00, 我想让数据源中也要显示2012-08-17,这个问题怎么解决?
Demo如下:

DateTest.rar (103.39 KB, 下载次数: 287)

7 个回复

倒序浏览
ZenosZeng讲师达人认证 悬赏达人认证
超级版主   /  发表于:2012-8-17 11:54:00
沙发
因为数据库中productDate列的数据类型是 DateTime ,所以在数据源中存储的是2012-8-17 00:00:00,这时DateTime所决定的,无法去掉00:00:00,有种替代方案是将数据源中 productDate 列的数据类型设置为 字符串 类型,而不是日期类型
回复 使用道具 举报
ddyTest
银牌会员   /  发表于:2012-8-17 13:09:00
板凳
数据库中productDate是string类型的,我在demo中的datatable中productDate列也是string的
回复 使用道具 举报
ZenosZeng讲师达人认证 悬赏达人认证
超级版主   /  发表于:2012-8-17 15:07:00
地板
因为设置了CellType为WinSpread.CellType.DateTimeCellType,所以,Spread将数据按照DateTime进行了转换。
回复 使用道具 举报
ddyTest
银牌会员   /  发表于:2012-8-17 15:17:00
5#
那有什么办法解决这个问题吗?如果改成TextCellType的话,就不能在输入时限定为日期格式,
回复 使用道具 举报
ZenosZeng讲师达人认证 悬赏达人认证
超级版主   /  发表于:2012-8-17 16:10:00
6#
你看这样的自定义 TextCellType 类型是否满足你的需要,取出来的值没有 00:00:00,但是值的格式为XXXX/XX/XX,而不是XXXX-XX-XX:
  1.     public partial class Form1 : Form
  2.     {
  3.         public Form1()
  4.         {
  5.             InitializeComponent();
  6.         }

  7.         private void Form1_Load(object sender, EventArgs e)
  8.         {
  9.             fpSpread1.ActiveSheet.Columns[0].CellType = new MyDateCellType();
  10.             fpSpread1.ActiveSheet.Cells[0, 0].Value = "2012/01/01";
  11.         }
  12.     }

  13.     public class MyDateCellType : FarPoint.Win.Spread.CellType.TextCellType
  14.     {
  15.         public override void PaintCell(Graphics g, Rectangle r, FarPoint.Win.Spread.Appearance appearance, object value, bool isSelected, bool isLocked, float zoomFactor)
  16.         {
  17.             if (value != null)
  18.             {
  19.                 DateTime dt;
  20.                 if (DateTime.TryParse(value.ToString(),out dt))
  21.                 {
  22.                     value = dt.ToString("yyyy-MM-dd");
  23.                 }
  24.             }
  25.             base.PaintCell(g, r, appearance, value, isSelected, isLocked, zoomFactor);
  26.         }
  27.     }
复制代码
回复 使用道具 举报
ddyTest
银牌会员   /  发表于:2012-8-17 16:29:00
7#
谢谢。可以不用这么麻烦了,我发现只要设置EditorValue 就可以解决这个问题了。
  1.    
  2.             Dim cellType As New CellType.DateTimeCellType
  3.             cellType.EditorValue = FarPoint.Win.Spread.CellType.DateTimeEditorValue.String
复制代码
回复 使用道具 举报
ZenosZeng讲师达人认证 悬赏达人认证
超级版主   /  发表于:2012-8-17 16:37:00
8#
好的,能实现该功能就OK!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部