找回密码
 立即注册

QQ登录

只需一步,快速开始

yin_tb
高级会员   /  发表于:2021-3-11 18:00:41
10#
另外,你写的这段代码,我也看了,如果我写的程序,预留了50种属性,因为允许客户自己选择使用哪些属性,那不是很麻烦。
改你的代码如下,用中文写,你看,这样写可以吗:
c1TrueDBGrid1.FetchCellStyle += (s, e) =>
            {
              e.CellStyle.Locked = true;
                if (tgrid(e.row,颜色)=True)
                {
                    e.CellStyle.Locked = False;
                    e.CellStyle.BackColor = Color.LightSeaGreen;
                }
                else if (tgrid(e.row,尺码)=True)
                {
                    e.CellStyle.Locked = False;
                    e.CellStyle.BackColor = Color.LightSeaGreen;
                }
                else if (tgrid(e.row,季节)=True)
                {
                   e.CellStyle.Locked = False;
                    e.CellStyle.BackColor = Color.LightSeaGreen;
                }
            };
回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2021-3-11 18:07:07
11#
嗯,主要还是给你提供一个思路,具体还是按照你这边的业务逻辑来写代码。

如果还是无法实现你需要的功能的话,你可以私信给我电话,我电话和你联系沟通
回复 使用道具 举报
yin_tb
高级会员   /  发表于:2021-3-11 18:10:36
12#
上面代码不明确,我重写,如下:c1TrueDBGrid1.FetchCellStyle += (s, e) =>
            {
              e.CellStyle.Locked = true;  //锁定所有列,对吧?
                if (tgrid(e.row,颜色标志)=True)
                {
                    e.CellStyle.Locked = False;  //让颜色列表单元格不锁定,和标志不是一个列
                    e.CellStyle.BackColor = Color.LightSeaGreen;
                }
                else if (tgrid(e.row,尺码)=True)
                {
                    e.CellStyle.Locked = False; //让尺码列表单元格不锁定,和尺码标志不是同一列
                    e.CellStyle.BackColor = Color.LightSeaGreen;
                }
                else if (tgrid(e.row,季节)=True)
                {
                   e.CellStyle.Locked = False; //让季节列表单元格不锁定,和标志不是同一列
                    e.CellStyle.BackColor = Color.LightSeaGreen;
                }
            };
回复 使用道具 举报
yin_tb
高级会员   /  发表于:2021-3-11 18:12:22
13#
这一点不如微软自带的DataGridView,人家这样写  datagridview1.item(row,col).readonly=true   就这么简单,怎么判断都行
回复 使用道具 举报
yin_tb
高级会员   /  发表于:2021-3-11 18:12:53
14#
datagridview1.item(row,col).value   是单元格的值
回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2021-3-12 10:22:40
15#
电话和你沟通确实,你是要判断某一列的值是否符合逻辑, 以此控制另外的列是否解锁,可以参考以下代码

  1.             //锁定所有单元格
  2.             c1TrueDBGrid1.Splits[0].Style.Locked = true;
  3.             c1TrueDBGrid1.FetchCellStyle += (s, e) =>
  4.             {
  5.                
  6.                 //需要用第4列的标志条件,控制第5列和第六列,且条件相同,如果条件不同需要另起一个逻辑来写
  7.                 if (e.Col == 5|| e.Col == 6)
  8.                 {
  9.                     if (c1TrueDBGrid1[e.Row, 4].ToString()== "Owner")
  10.                     {
  11.                         e.CellStyle.Locked = false;
  12.                         e.CellStyle.BackColor = Color.LightSeaGreen;
  13.                     }

  14.                 }
  15.             };
复制代码


另外你提到的FetchRowStyle,是在此行渲染时触发,没有必要在这种需求下使用
回复 使用道具 举报
yin_tb
高级会员   /  发表于:2021-3-12 15:21:14
16#
Richard.Ma 发表于 2021-3-12 10:22
电话和你沟通确实,你是要判断某一列的值是否符合逻辑, 以此控制另外的列是否解锁,可以参考以下代码


...

马老师,请看附件DEMO

本帖子中包含更多资源

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

x
回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2021-3-12 17:55:09
18#
,是这个原因,问题解决了就行
回复 使用道具 举报
yin_tb
高级会员   /  发表于:2021-3-12 17:57:15
19#
感谢马老师,那么辛苦,一直在帮我找办法,感谢!!!!!!!!!!!,看来以后在用C1组件时,一定要天马行空,不能用常规思想
回复 使用道具 举报
yin_tb
高级会员   /  发表于:2021-3-12 18:04:18
20#
另外,我把管理标志列的datafield全改名为ifree1, 2,3这种名,输入的列表列用free1,2,3这种,然后在FetchCellStyle事件中,用列名的Contains来比对,再组合列名字符串,很短的语句,实现了就算有100种属性,也很好,应该性能也很快。感谢马老师,要不是你说用名字不行,用e.col可以,我也想不到去debug.print,结果一看,出来的名全是中文,我一下恍然大悟,感谢。终于这次不是C1的BUG。不然,我真要崩溃了,哈哈哈,爽爽爽。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部