找回密码
 立即注册

QQ登录

只需一步,快速开始

xuxs

高级会员

50

主题

138

帖子

1086

积分

高级会员

积分
1086

活字格认证微信认证勋章

xuxs
高级会员   /  发表于:2014-6-19 10:58  /   查看:6691  /  回复:8
你好,我在设置了flexgrid某列的Data类型为Int32,fomat设置为 #,##0
当我在单元格中输入数字时没问题,能按照设定格式进行format,当我删除单元格数据时默认显示为0
请问我如何设置能让我在删除当前单元格的所有数据之后显示为空

8 个回复

倒序浏览
iceman
社区贡献组   /  发表于:2014-6-19 14:06:00
沙发
回复 1楼xuxs的帖子

设置代码如下:

  1.         private void Form1_Load(object sender, EventArgs e)
  2.         {
  3.             this.c1FlexGrid1.Cols[1].DataType = typeof(System.Int32);
  4.             this.c1FlexGrid1.Cols[1].Format = "#,##0";

  5.             this.c1FlexGrid1.CellChanged += c1FlexGrid1_CellChanged;
  6.             this.c1FlexGrid1.ValidateEdit += c1FlexGrid1_ValidateEdit;
  7.         }

  8.         void c1FlexGrid1_ValidateEdit(object sender, C1.Win.C1FlexGrid.ValidateEditEventArgs e)
  9.         {
  10.             if (c1FlexGrid1.Editor.Text.Length == 0)
  11.             {
  12.                 c1FlexGrid1[e.Row, e.Col] = null;
  13.                 c1FlexGrid1.FinishEditing(true);
  14.             }
  15.         }
复制代码
回复 使用道具 举报
xuxs
高级会员   /  发表于:2014-6-19 14:22:00
板凳
回复 2楼iceman的帖子

这个代码我测试了,当我删除数字之后还是默认显示为0,不知道代码中的c1FlexGrid1_CellChanged事件里面写什么了吗,目前的代码好像达不到这个效果。
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2014-6-19 18:06:00
地板
回复 3楼xuxs的帖子

抱歉,刚才给的代码判断条件有问题,修改了下,请测试:

  1.         private void Form1_Load(object sender, EventArgs e)
  2.         {
  3.             this.c1FlexGrid1.Cols[1].DataType = typeof(System.Int32);
  4.             this.c1FlexGrid1.Cols[1].Format = "#,##0";

  5.             this.c1FlexGrid1.ValidateEdit += c1FlexGrid1_ValidateEdit;
  6.         }

  7.         void c1FlexGrid1_ValidateEdit(object sender, C1.Win.C1FlexGrid.ValidateEditEventArgs e)
  8.         {
  9.             if (c1FlexGrid1.Editor.Text == "0")
  10.             {
  11.                 c1FlexGrid1[e.Row, e.Col] = null;
  12.                 c1FlexGrid1.FinishEditing(true);
  13.             }
  14.         }
复制代码
回复 使用道具 举报
xuxs
高级会员   /  发表于:2014-6-20 09:58:00
5#
非常感谢,生效了。我还有个疑问,当初为了限制用户输入的数字长度为5 我在setupeditor事件里面通过取得Grid的Editor并将其转换为TextBox之后设置了它的MaxLength为5,但是目前由于设置了format为#,##0导致输入4位数字之后就不能再输入了,因为输入的数字被format之后有了逗号(例如:1,234),但是实际上我只输入了4位,请问如何能做到按照实际的输入来限制输入长度,而不是根据format之后的长度。
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2014-6-20 17:56:00
6#
回复 5楼xuxs的帖子

问题我已经了解了,正在处理中,有结果反馈给你。
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2014-6-23 16:10:00
7#
回复 5楼xuxs的帖子

实际输入的时候,Format中的逗号会计入到TextBox的字符长度里。比如,你设置MaxLength为5,输入1234后,实际上字符是(1,234)一共5位,已经达到最大字符长度的限制,因此不能接受输入了。
根据你的需求,你可以先计算出Format里的逗号数量,然后设置MaxLength是数字长度+逗号数量。参考代码如下,你可以看看。
  1.         void c1FlexGrid1_SetupEditor(object sender, RowColEventArgs e)
  2.         {                       
  3.             TextBox tx = this.c1FlexGrid1.Editor as TextBox;
  4.             if(e.Col==1)
  5.             {
  6.                string myformat = this.c1FlexGrid1.Cols[e.Col].Format;
  7.                 //获得Format里逗号的数量
  8.                 int count = Regex.Matches(myformat, ",").Count;
  9.                 tx.MaxLength = 5 + count;
  10.             }
  11.         }
复制代码
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
xuxs
高级会员   /  发表于:2014-6-23 16:50:00
8#
好的,谢谢
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2014-6-24 09:55:00
9#
回复 8楼xuxs的帖子

好的,如果有什么问题欢迎询问。
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部