找回密码
 立即注册

QQ登录

只需一步,快速开始

szpzr
高级会员   /  发表于:2018-4-27 12:36:40
21#
好的,谢谢!
回复 使用道具 举报
dexteryao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2018-4-27 14:09:24
22#
回复 使用道具 举报
dexteryao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2018-5-7 15:54:49
23#
请参考

  1. public class MyItemTemplate : FarPoint.Web.Spread.MenuItem, ITemplate
  2.     {     
  3.         public MyItemTemplate(string text, string commandName, string commandArgument): base(text, commandName, commandArgument){}

  4.         public void InstantiateIn(Control container)
  5.         {
  6.             if (container != null)
  7.             {
  8.                 //Add a custom control as item
  9.                 CheckBox check1 = new CheckBox();
  10.                 check1.ID = base.CommandName;
  11.                 check1.Text = base.Text;
  12.                 if (base.OnClientClick != null)
  13.                     check1.Attributes.Add("onclick", OnClientClick);
  14.                 container.Controls.Add(check1);
  15.             }           
  16.         }
  17.     }
复制代码


  1.     protected void Page_Load(object sender, EventArgs e)
  2.         {
  3.             FpSpread1.MenuItemClicked += new FarPoint.Web.Spread.MenuItemClickedHandler(FpSpread1_MenuItemClicked);
  4.             if (this.IsPostBack) return;            
  5.             FpSpread1.EnableContextMenu = true;
  6.             BuildMenu();
  7.         }

  8.         protected void FpSpread1_MenuItemClicked(object sender, FarPoint.Web.Spread.MenuItemClickEventArgs eventArgs)
  9.         {
  10.             FpSpread1.Sheets[0].Cells[0, 0].Text = eventArgs.SelectedItem.CommandName.ToString();
  11.             FpSpread1.Sheets[0].Cells[0, 1].Text = eventArgs.SelectedItem.CommandArgument.ToString();
  12.             BuildMenu();
  13.         }

  14.         private void BuildMenu()
  15.         {
  16.             FpSpread1.ContextMenus.Clear();
  17.             FarPoint.Web.Spread.ContextMenu viewportMenu = new FarPoint.Web.Spread.ContextMenu();
  18.             viewportMenu.Type = FarPoint.Web.Spread.ContextMenuType.Viewport;
  19.             string itemText = string.Empty;
  20.             string itemCmdName = string.Empty;
  21.             string itemCmdArg = string.Empty;
  22.             for (int i = 0; i < 3; i++)
  23.             {
  24.                 itemText = string.Format("Menu item {0}", i + 1);
  25.                 itemCmdName = string.Format("cmd{0}", i + 1);
  26.                 itemCmdArg = string.Format("arg{0}", i + 1);
  27.                 FarPoint.Web.Spread.MenuItem item = new FarPoint.Web.Spread.MenuItem(itemText, itemCmdName, itemCmdArg);
  28.                 if (i == 1)
  29.                 {
  30.                     MyItemTemplate myItem = new MyItemTemplate(itemText, itemCmdName, itemCmdArg);
  31.                     myItem.OnClientClick = string.Format("javascript:alert('cmd = {0}, checked = ' + this.checked); return;", itemCmdName);
  32.                     item.ItemTemplate = myItem;
  33.                 }
  34.                 else if (i == 2)
  35.                 {
  36.                     for (int j = 0; j < 3; j++)
  37.                     {
  38.                         itemText = string.Format("Menu item {0}.{1}", i + 1, j + 1);
  39.                         itemCmdName = string.Format("cmd{0}${1}", i + 1, j + 1);
  40.                         itemCmdArg = string.Format("arg{0}${1}", i + 1, j + 1);
  41.                         FarPoint.Web.Spread.MenuItem newItem = new FarPoint.Web.Spread.MenuItem(itemText, itemCmdName, itemCmdArg);
  42.                         if (j == 0)
  43.                         {
  44.                             MyItemTemplate myItem = new MyItemTemplate(itemText, itemCmdName, itemCmdArg);
  45.                             myItem.OnClientClick = string.Format("javascript:alert('cmd = {0}, checked = ' + this.checked); return;", itemCmdName);
  46.                             newItem.ItemTemplate = myItem;
  47.                         }
  48.                         item.ChildItems.Add(newItem);
  49.                     }
  50.                 }
  51.                 viewportMenu.Items.Add(item);
  52.             }
  53.             FpSpread1.ContextMenus.Add(viewportMenu);
  54.         }
复制代码




回复 使用道具 举报
szpzr
高级会员   /  发表于:2018-5-7 17:25:24
24#
谢谢!姚工,辛苦您了。
回复 使用道具 举报
dexteryao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2018-5-7 17:27:26
25#
您根据您的需求调整下,有问题再发帖
回复 使用道具 举报
szpzr
高级会员   /  发表于:2018-5-8 07:48:38
26#
本帖最后由 szpzr 于 2018-5-8 08:04 编辑

姚工:myItem.OnClientClick = string.Format("javascript:alert('cmd = {0}, checked = ' + this.checked); return;", itemCmdName);定义了客户端事件,能否激发服务器端的事件?还有:myItem = new MyItemTemplate(itemText, itemCmdName, itemCmdArg);能否根据列是否显示设定checkbox勾选或不勾选?
回复 使用道具 举报
dexteryao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2018-5-8 09:42:53
27#
给MyItemTemplate 一个IsChecked的属性,初始化时候设置上。

MyItemTemplate myItem = new MyItemTemplate(itemText, itemCmdName, itemCmdArg);
myItem.IsChecked = true;

        public bool IsChecked { get; set; }

                check1.Checked = this.IsChecked;

触发服务端事件,您可以在前端post回去一个指令,加一些参数就可以了,
就和页面放一个button,点了一下隐藏了一列一样。直接checkbox挂服务端事件反而麻烦。

回复 使用道具 举报
szpzr
高级会员   /  发表于:2018-5-8 10:49:38
28#
菜单已生成了,我想在“确定”勾选框为true时,
触发服务端事件,在前端post回去一个指令,加一些参数就可以了,如何做?不好意思,麻烦您了,姚工。
捕获.PNG
回复 使用道具 举报
dexteryao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2018-5-8 15:05:17
29#
szpzr 发表于 2018-5-8 10:49
菜单已生成了,我想在“确定”勾选框为true时,
触发服务端事件,在前端post回去一个指令,加一些参数就可 ...

这个已经和产品没有关系了,您查询下如何js post数据到服务端更新很多文章的。
把您点击的这个checkbox对应的列号post回去,设置下列隐藏,更新即可。
回复 使用道具 举报
szpzr
高级会员   /  发表于:2018-5-9 15:46:06
30#
姚工,不好意思,页面刷新后,生成的菜单没有勾选框,跟spread分组没关系吧?
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部