找回密码
 立即注册

QQ登录

只需一步,快速开始

iceman

社区贡献组

270

主题

1万

帖子

1万

积分

社区贡献组

积分
19311

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

iceman
社区贡献组   /  发表于:2011-11-25 19:26  /   查看:11909  /  回复:19
许多用户都问到,能不能在 CommandBar 添加自定义按钮,去实现特殊的功能?
下面这篇文章将展示如何在 CommandBar  添加自定义按钮,及如何使用自定义按钮调用前台和后台事件:
主要步骤:
1.添加 Spread ButtonCommand 事件,提供 自定义 button 调用。

2. 重载 Render 添加自定义按钮:
  1.         protected override void Render(HtmlTextWriter writer)
  2.         {
  3.             Table table = FpSpread1.FindControl("cmdTable") as Table;

  4.             //自定义按钮调用前台事件
  5.             DropDownList changepage = new DropDownList();
  6.             changepage.ID = "pageindex";
  7.             changepage.Items.Add("1");
  8.             changepage.Items.Add("2");
  9.             changepage.Items.Add("3");
  10.             changepage.Items.Add("4");
  11.             changepage.Items.Add("5");
  12.             changepage.Attributes.Add("onchange", "change()");

  13.             TableCell cell2 = new TableCell();
  14.             cell2.Controls.Add(changepage);
  15.             table.Rows[0].Cells.Add(cell2);


  16.             //自定义按钮调用后台事件
  17.             TableCell cell1 = new TableCell();
  18.             Button btn1 = new Button();
  19.             btn1.Text = "自定义按钮";
  20.             btn1.Text = "Button1";
  21.             btn1.Attributes.Add("onclick", ClientScript.GetPostBackEventReference(FpSpread1, "BtnCommand,-1,-1") + "; return false;");
  22.             cell1.Controls.Add(btn1);
  23.             table.Rows[0].Cells.Add(cell1);

  24.             base.Render(writer);
  25.         }
复制代码
3.DropDownList  前台函数代码:
  1.     <script type="text/javascript">
  2.         function change() {
  3.             var pageindex = document.getElementById("FpSpread1_pageindex").value-1;
  4.             FpSpread1.CallBack("Page,"+pageindex);
  5.             return false;
  6.         }
  7.     </script>
复制代码
效果图:

png

png


Demo 下载:
测试环境:VS2010 + Srpead for ASP.NET V5.0.3524.2008
Demo.zip (2.78 MB, 下载次数: 637)

19 个回复

正序浏览
iceman
社区贡献组   /  发表于:2012-4-1 10:58:00
推荐

回复 4# study1990 的帖子

study1990 你好,
我的实现方法是,
1.添加 HiddenField 控件,用于在前台记录 mypager.value。
2.前台添加 FpSpread1.CallBack("Button",+pageindex); 去调用 Button_Command,在 Button_Command 取得 HiddenField  值即可。
前台代码:

  1.     <script type="text/javascript">
  2.         function change() {
  3.             var pageindex = document.getElementById("FpSpread1_pageindex").value - 1;
  4.             //HiddenFiled ID 为 getpage
  5.             var getpage = document.getElementById("getpage");
  6.             page.value = pageindex;
  7.             FpSpread1.CallBack("Page," + pageindex);
  8.             FpSpread1.CallBack("Button",+pageindex);
  9.             return false;
  10.         }
  11.     </script>
复制代码
后台代码:

  1.         protected void FpSpread1_ButtonCommand(object sender, FarPoint.Web.Spread.SpreadCommandEventArgs e)
  2.         {
  3.             string test = this.getpage.Value;
  4.         }
复制代码
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2012-4-25 08:55:00
20#

回复 19# study1990 的帖子

:share:
回复 使用道具 举报
study1990
金牌服务用户   /  发表于:2012-4-25 08:38:00
19#

回复 18# iceman 的帖子

实现了,O(∩_∩)O谢谢
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2012-4-24 09:46:00
18#

回复 17# study1990 的帖子

study1990 你好,可以在 FpSpread1_CreateButton 事件中设置 CommandBar 中按钮是否显示:

  1. protected void FpSpread1_CreateButton(object sender, FarPoint.Web.Spread.CreateButtonEventArgs e)
  2.         {
  3.             if (e.Label==&quot;Print&quot;)
  4.             {
  5.                 e.Visible = false;
  6.             }
  7.         }
复制代码
回复 使用道具 举报
study1990
金牌服务用户   /  发表于:2012-4-24 09:26:00
17#

回复 16# iceman 的帖子

请问怎么让commandBar上的打印按钮不显示?
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2012-4-19 17:51:00
16#

回复 15# study1990 的帖子

study1990 你好,
不好意思,我目前也没有找到好的解决方法。在 IE 中使用该方法是正常的。如果在多浏览器中使用,还是建议楼主在 Spread 外部模拟 CommandBar 添加下拉菜单。
回复 使用道具 举报
study1990
金牌服务用户   /  发表于:2012-4-19 13:47:00
15#

回复 14# iceman 的帖子

最初尝试过模拟CommandBar,可这样就两行了,不好看,如果把原来的去掉,Update就不好用了。我们现在已经在CommandBar上添加了许多按钮了,工作量很大,想再重新模拟CommandBar已回不去了。
现在就一个问题了:“在Spread的commandBar中添加的下拉菜单在火狐中点击后总是自动弹回”,望版主帮忙解决一下。
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2012-4-12 17:24:00
14#
你好,如果是出于美观问题,即使是在 Spread 外部我们也完全可以模仿 CommandBar 外观,下面是我使用 Div 模拟的 CommandBar:
test.png (21.96 KB, 下载次数: 91)
回复 使用道具 举报
study1990
金牌服务用户   /  发表于:2012-4-12 14:47:00
13#

回复 12# iceman 的帖子

在 Spread 外部添加功能按钮,显得布局不好看,本来CommandBar上就是按钮行,原控件上又没有那些功能,我们只能自添加了。
单元格总是自动捕捉焦点,是不是属性设置的问题,是哪个属性设置错了?
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2012-4-10 18:28:00
12#

回复 11# study1990 的帖子

study1990 你好,
目前无法重现该问题,请发 Demo 到论坛调试。
建议楼主在 Spread 外部使用 ASP.NET 标准控件添加特殊功能按钮。不建议在 CommandBar 中添加过于复杂的按钮,该方法没有经过严格的测试,不可控因素过多。
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部