找回密码
 立即注册

QQ登录

只需一步,快速开始

一萧一剑

中级会员

30

主题

70

帖子

650

积分

中级会员

积分
650

活字格认证微信认证勋章元老葡萄

一萧一剑
中级会员   /  发表于:2015-4-15 13:53  /   查看:9796  /  回复:10
1)我想注册一个单元格离开事件,在单元格离开时执行后台的代码。
2)下面这个 OutOfEdit()在哪里注册呢,可以只对某列注册吗,对整个Spread又该如何注册。
<SCRIPT language=javascript>
   function OutOfEdit() {
       FpSpread1.EndEdit(); // out of editing mode
   }
</SCRIPT>
技术改变世界

10 个回复

倒序浏览
iceman
社区贡献组   /  发表于:2015-4-15 16:21:00
沙发
回复 1楼一萧一剑的帖子

针对 Spread 控件注册方法如图:
Untitled.png


无法针对某列进行注册,可以通过以下代码获取当前活跃列:

  1. ret = FpSpread1.GetActiveCol();
复制代码


执行后台代码可以使用 CallBack 方法调用 ButtonCommand 事件。
回复 使用道具 举报
一萧一剑
中级会员   /  发表于:2015-4-16 14:13:00
板凳
1) 图1是我的截图属性里面没有你截图的属性,图2是你发的截图。
2)注册完事件后怎么调用
1.png

2.png

77.16 KB, 下载次数: 353

技术改变世界
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2015-4-16 17:48:00
地板
回复 3楼一萧一剑的帖子


需要展开红色框节点。

Untitled.png


根据1#描述做了个 Demo 请参考:
callback.zip (7.7 KB, 下载次数: 376)
回复 使用道具 举报
一萧一剑
中级会员   /  发表于:2015-4-17 09:43:00
5#
1)Demo下载了不能用,显示不可用,项目被卸载,用VS2010打开的。
2)EditStopped属性不能自定义方法名称,会提示属性无效值。只能选下拉框的固定事件
3)模仿你的事例(用txt打开看的),点击某一列,光标离开后,又会自动回到刚才点击的那列,不停的重复。代码如下:
<script type="text/javascript">


        function SaveButtonClick(event) {
         
            var spread = this.document.getElementById("FpSpreadGV");
            var activecol = spread.GetActiveCol();
            if (activecol == 19) {
                spread.CallBack("buttonTest");
            }
        }
</script>

  protected void FpSpreadGV_ButtonCommand(object sender, FarPoint.Web.Spread.SpreadCommandEventArgs e)
        {
            switch (e.CommandName)
            {
                case "buttonTest":
                    int row = e.SheetView.ActiveRow;
                    int col = e.SheetView.ActiveColumn;
                    FpSpreadGV.ActiveSheetView.Cells[row, 20].Text = "";
                    break;


            }
        }
4)我想实现的功能是光标离开某一列,后台通过逻辑运算后去修改另一列的值。
技术改变世界
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2015-4-17 11:14:00
6#
回复 5楼一萧一剑的帖子

请按照如下代码修改:
前台:

  1.     <script language="javascript" type="text/javascript" id="FpSpread1_Script0">
  2.                 function FpSpread1_EditStopped(event){
  3.                     //Add code to handle your event here.
  4.                     var spread = this.document.getElementById("FpSpreadGV");
  5.                     var activecol = spread.GetActiveCol();
  6.                     if (activecol == 2) {
  7.                         spread.Update();
  8.                         spread.CallBack("buttonTest");
  9.                     }
  10.                 }
  11.     </script>
复制代码


后台:

  1.         protected void FpSpread1_ButtonCommand(object sender, FarPoint.Web.Spread.SpreadCommandEventArgs e)
  2.         {
  3.             switch (e.CommandName)
  4.             {
  5.                 case "buttonTest":
  6.                     int row = e.SheetView.ActiveRow;
  7.                     int col = e.SheetView.ActiveColumn;
  8.                     FpSpreadGV.ActiveSheetView.Cells[row, 20].Text = "";
  9.                     FpSpreadGV.ActiveSheetView.ActiveColumn = 20;
  10.                     FpSpreadGV.ActiveSheetView.ActiveRow = row;

  11.                     break;


  12.             }

  13.         }
复制代码
回复 使用道具 举报
一萧一剑
中级会员   /  发表于:2015-4-17 14:44:00
7#
上述代码功能是可以实现,但是体验性太差了,当光标离开19列后,要等3秒钟20列的值才改变,然后再等3秒光标才定位到20列,
也就是说我改完一列的值后要等6-7秒才能改第2个值。
我实现的功能是光标离开某一列,后台通过逻辑运算后去修改另一列的值。(有没有其他方法,上述方法根本没有体验性)
技术改变世界
回复 使用道具 举报
一萧一剑
中级会员   /  发表于:2015-4-17 14:53:00
8#
我想了一下原因,就是这个界面加载进来的时候大概3秒钟,是不是执行那个事件后又会重新加载这个界面造成的,有没有什么解决方案。
技术改变世界
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2015-4-17 17:22:00
9#
回复 8楼一萧一剑的帖子

是这个原因。
如果前台可以实现你的功能建议从前台走,前台也可以设置单元格的值,设置方法为:

  1. <SCRIPT language=javascript>
  2.    function ProfileSpread()
  3.    {
  4.       var szCell = document.all("FpSpread1");
  5.       if (szCell.ActiveCol == 0)
  6.       {
  7.          szCell.SetValue(0,1,"Scott",true);
  8.          alert("Test");
  9.       }
  10.    }
  11. </SCRIPT>
复制代码


或者走后台的话,建议使用按需加载,在线示例链接:
http://demo.gcpowertools.com.cn/ ... emand/Overview.aspx
回复 使用道具 举报
一萧一剑
中级会员   /  发表于:2015-4-20 11:24:00
10#
可以去前台实现,想请教一下前台怎么取值,如附件图片所示:
当点击第4行时,usage的值是0,怎么取和它ItemNo一样,usage不为零的值。(如图应该取第3行ItemNo也是3,usage是8),
前台怎么遍历speard,有没有可以像SQL一样快速查找到数据,如果全部遍历速度是不是很慢?
技术改变世界
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部