找回密码
 立即注册

QQ登录

只需一步,快速开始

yin_tb

中级会员

53

主题

198

帖子

999

积分

中级会员

积分
999

微信认证勋章

yin_tb
中级会员   /  发表于:2021-3-11 15:05  /   查看:8211  /  回复:20
1金币
如题,C1文档中说,如果TrueDBgrid要冻结单元格,首先将列的FetchStyle设为True. 然后在事件FetchCellStyle中,e.CellStyle.Locked=True.
以上我能明白,也测试可以。但我发现,e.CellStyle.Locked=True. 会让该行所有FetchStyle设为True的该行单元格全冻结了呀。
现实是,如果我开发的ERP系统,需要在表单中录入存货,存货管理的属生不同,比如,有的同时管理颜色和尺码,有的只管颜色,有的只管尺码,有的什么也不管理,不管理代表不是必输,管理代表必输。
网格中有以下列, 存货编码  名称   数量  单价   金额   颜色    尺码 ,我将颜色和尺码列的FetchStyle设为True,我需要在录入过程中,根据录入的存货来区分,如果全管理时,不冻结颜色和尺码,如果只管颜色,那就冻结尺码单元格,如果只管尺码,就冻结颜色单元格,请问,这种情况支持吗?我知道微软自带的datagridview可以,难道C1TrueDBgrid还不如它?

最佳答案

查看完整内容

我犯了低级错误,也怪国外人写的C1TrueDBgrid的思路不好,不像微软,微软datagridview,人家的名字和caption是分开的,所以,name一般都用英文的,但C1TrueDBgrid的名字是和标题一样的,所以,在Demo里,我用的是中文,比对时不对,不能用e.column.name,得用e.column.datacolumn.datafield.tostring() 这样,比对的名字就对了. 在此留贴,让别人看一下,别犯我这种错误了,呵呵

20 个回复

倒序浏览
最佳答案
最佳答案
yin_tb
中级会员   /  发表于:2021-3-11 15:05:15
来自 17#
我犯了低级错误,也怪国外人写的C1TrueDBgrid的思路不好,不像微软,微软datagridview,人家的名字和caption是分开的,所以,name一般都用英文的,但C1TrueDBgrid的名字是和标题一样的,所以,在Demo里,我用的是中文,比对时不对,不能用e.column.name,得用e.column.datacolumn.datafield.tostring()   这样,比对的名字就对了.  在此留贴,让别人看一下,别犯我这种错误了,呵呵
回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2021-3-11 15:35:38
2#
FetchCellStyle本来就是对单元格进行操作的,可以按照需要的条件锁定单元格
比如下面的代码,就对行数和列数相加为偶数的单元格当都做了设置背景颜色和锁定

  1. c1TrueDBGrid1.FetchCellStyle += (s, e) =>
  2.             {
  3.                 if ((e.Row + e.Col) % 2 == 0)
  4.                 {
  5.                     e.CellStyle.Locked = true;
  6.                     e.CellStyle.BackColor = Color.LightSeaGreen;
  7.                 }
  8.             };
复制代码



本帖子中包含更多资源

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

x
回复 使用道具 举报
yin_tb
中级会员   /  发表于:2021-3-11 16:27:15
3#
明白了,马老师,谢谢。我犯了低级错误。
回复 使用道具 举报
yin_tb
中级会员   /  发表于:2021-3-11 16:51:11
4#
还得麻烦你,我发现,你的代码方式还是和我的逻辑不对,实现不了。这样说吧,属性都设好了,网格中有以下列, 存货名称  , 颜色 ,尺码 ,颜色管理,尺码管理,这些列,颜色管理和尺码管理是boolen类型,其它是字符类型。录入三行,第一行, 存货名称是A,颜色管理是True ,尺码管理是False.  第二行,存货名称是B ,颜色管理是False,尺码管理是 True.第三行,颜色管理和尺码管理都是True.  我想要的是,当第一行A,只管理颜色,颜色管理是True,那么Lock尺码列,第二行B,管理尺码,这时,应该让颜色单元格锁定,不准输入。第三行,两种属性都管理,不锁定颜色和尺码单元格,该如何实现呢?
回复 使用道具 举报
yin_tb
中级会员   /  发表于:2021-3-11 17:07:34
5#
Richard.Ma 发表于 2021-3-11 15:35
FetchCellStyle本来就是对单元格进行操作的,可以按照需要的条件锁定单元格
比如下面的代码,就对行数和列 ...

再看看我的回复,马老师
回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2021-3-11 17:24:26
6#
按照你的逻辑实际上就是对这几个固定的单元格设置locked,这样更简单,只需要直接将条件设置为行号和列号就行,截图里绿色的就是设置了locked和backcolor的



  1. c1TrueDBGrid1.FetchCellStyle += (s, e) =>
  2.             {
  3.                 if (e.Row == 1 && e.Col == 2)
  4.                 {
  5.                     e.CellStyle.Locked = true;
  6.                     e.CellStyle.BackColor = Color.LightSeaGreen;
  7.                 }
  8.                 else if (e.Row == 2 && e.Col == 1)
  9.                 {
  10.                     e.CellStyle.Locked = true;
  11.                     e.CellStyle.BackColor = Color.LightSeaGreen;
  12.                 }
  13.                 else if (e.Row == 3 &&( e.Col == 1|| e.Col == 2))
  14.                 {
  15.                     e.CellStyle.Locked = true;
  16.                     e.CellStyle.BackColor = Color.LightSeaGreen;
  17.                 }
  18.             };
复制代码

本帖子中包含更多资源

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

x
回复 使用道具 举报
yin_tb
中级会员   /  发表于:2021-3-11 17:36:17
7#
Richard.Ma 发表于 2021-3-11 17:24
按照你的逻辑实际上就是对这几个固定的单元格设置locked,这样更简单,只需要直接将条件设置为行号和列号就 ...

我刚才只是举例三种A,B,C,实际上是,客户上千种货品,可能属性有10几种,颜色,尺码,季节,花色。。。。。。,提前并不知道客户会录什么货品,所以不知道行号,只有录了货品,给那行的各个单元格指定了管理什么属性的标志,才知道哪些列需要不锁,哪些锁定,能明白我说的吗?
回复 使用道具 举报
yin_tb
中级会员   /  发表于:2021-3-11 17:40:35
8#
和我举例A,B,C类似,当在表单中录入一种编码,系统自动取得这种货品的管理属性,然后给表单中的各个属性标志赋值,然后,根据表单的管理属性标志,来确定该行需要不锁哪些单元格,管理标志为False的就锁定
回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2021-3-11 17:51:18
9#
本帖最后由 Richard.Ma 于 2021-3-11 17:55 编辑

那么你要的我想无法还是根据单元格内容进行条件判断,
比如下面第二列,根据每行中,这列的单元格值判断(可以用文本值、数字值对比),是True的话,就locked,否则就unlocked就行,这个就是你要的了吧,

如果还不是你的需求的话,你直接私信给我你的电话,我联系你电话沟通
  1.             c1TrueDBGrid1.FetchCellStyle += (s, e) =>
  2.             {
  3.                 if (e.Col == 4)
  4.                 {
  5.                     if (c1TrueDBGrid1[e.Row, 4].ToString()== "Owner")
  6.                     {
  7.                         e.CellStyle.Locked = true;
  8.                         e.CellStyle.BackColor = Color.LightSeaGreen;
  9.                     }
  10.                         
  11.                     else
  12.                         e.CellStyle.Locked = false;
  13.                 }

  14.             };
复制代码






本帖子中包含更多资源

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

x
回复 使用道具 举报
123下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部