请选择 进入手机版 | 继续访问电脑版
 找回密码
 立即注册

QQ登录

只需一步,快速开始

正指针

注册会员

8

主题

21

帖子

61

积分

注册会员

积分
61
正指针
注册会员   /  发表于:2025-1-9 14:20  /   查看:63  /  回复:3
50金币

单元格的类型设置为ComboBoxCellType且绑定EditorValueChanged事件
问题1:选择A列的时候也会触发其他列的EditorValueChanged事件
问题2:点击一次EditorValueChanged会触发两次
EditorValueChanged是什么时候触发,怎么能做到只有改当前单元格的值时才触发当前单元格绑定的EditorValueChanged而不是同时多次触发?
(逻辑上可做到对比改前改后的值如果一样就不走自增逻辑,但是事件还是会多次触发,是否会引起内存等相关问题?)
下面是做的例子:
功能:
设置第一列和第三列是下拉框,(如下图)
目标:
第一列每次选择不同的值第二列的值自增1
第三列每次选择不同的值第四列的值自增1
1736401795316.png228375243.png


测试1:
选择第一列,第二列自增加1 符合预期。
(第一列不退出编译的情况下不管怎么下拉改值 第二列每次都是自增1)
1736402131715.png448049621.png
测试2:
第一步:选择第一列,第二列自增加1 符合预期。
第二步:选择其他单元格。(使第一个单元格退出编辑状态)
第三步:再次选择第一列并改选中的值。目标第二列变成2实际是下拉打开还没选择的情况下第二列变成了3(EditorValueChanged触发了两次)
猜测:单元格第二次进入编辑状态时会触发两次EditorValueChanged事件。
image.png545363769.png
  测试3:

第一步:选择第一列,第二列自增加1 符合预期。
第二步:选择其他单元格。(使第一个单元格退出编辑状态)

第三步:选择第三列。目标第二列是1第四列也是1.
              实际情况是第三列下拉刚打开时 第二列自动加1了
                               第三列选定值后第二列又自动加1了,第四列正常显示
image.png514244994.png
image.png264207152.png

相关程序再附件中
spread 版本如图:
image.png500105590.png WindowsFormsApp51.zip (16.05 MB, 下载次数: 1)

3 个回复

倒序浏览
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2025-1-9 17:49:45
沙发
这里的valueChanged本身就不是指的单元格的值变化。从你说的需求,应该是想要判断单元格值变化,应该监听CellChanged 事件
            spdDspQuery1.ActiveSheet.CellChanged += (s, ee) => {
            
            };
回复 使用道具 举报
正指针
注册会员   /  发表于:2025-1-9 19:48:08
板凳
Richard.Ma 发表于 2025-1-9 17:49
这里的valueChanged本身就不是指的单元格的值变化。从你说的需求,应该是想要判断单元格值变化,应该监听Ce ...

尝试过cellchenge 事件

有个问题
下拉框选中后处于编辑状态不会CellChanged事件除非退出编辑状态
如图
image.png487446593.png

image.png914317626.png

image.png530015868.png
代码如下


private void fpSpread1_Sheet1_CellChanged(object sender, FarPoint.Win.Spread.SheetViewEventArgs e)
{
     if (e.Column == 0)
     {                string str1 = spdDspQuery1.ActiveSheet.Cells[0, 1].Text;
         if (int.TryParse(str1, out int inOUt))
         {
             inOUt++;
             spdDspQuery1.ActiveSheet.Cells[0, 1].Text = inOUt.ToString();
         }
         else
         {
             spdDspQuery1.ActiveSheet.Cells[0, 1].Text = "1";
         }
     }
     if (e.Column == 1)
     {
         string str1 = spdDspQuery1.ActiveSheet.Cells[0, 3].Text;
         if (int.TryParse(str1, out int inOUt))
         {
             inOUt++;
             spdDspQuery1.ActiveSheet.Cells[0, 3].Text = inOUt.ToString();
         }
         else
         {
             spdDspQuery1.ActiveSheet.Cells[0, 3].Text = "1";
         }
     }
}

回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2025-1-13 09:17:16
地板
是的,正如我上面提到的,单元格值是在编辑器退出编辑状态后,才会被改变,如果你是要监听编辑器的变化。那么只能使用编辑器组件本身的事件

从目前的情况看,ComboBoxCellType这个内置的单元格类型中的事件无法满足你的需求,你可以尝试自己定义一个类似的编辑器组件。然后用相关事件。比如就使用原生的combobox组件

关于自定义单元格类型可以参考
https://www.grapecity.com.cn/doc ... elltype-custom.html
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部