找回密码
 立即注册

QQ登录

只需一步,快速开始

ZenosZeng 讲师达人认证 悬赏达人认证
超级版主   /  发表于:2012-6-28 13:55  /   查看:9803  /  回复:8
Spread for ASP.NET 6.0中客户端删除是通过CommandBar上的删除按钮来实现的,默认状态下该操作一次只能删除一行数据,在实际需求中,我们往往需要一次删除多行数据。
delete.png

点击客户端的“删除”按钮之后,会调用FpSpread.Delete()方法来完成的删除操作,要实现一次删除多行数据就需要改变Spread的默认行为,修改点击“删除”按钮之后的处理逻辑,这里将提供两种一次删除多行数据的实现方法:

第一种:使用CheckBox标记需要删除的行
1、将Spread第一列的单元格类型设置为CheckBoxCellType
  1. this.FpSpread1.ActiveSheetView.Columns[0].CellType = new FarPoint.Web.Spread.CheckBoxCellType();
复制代码

2、重写“删除”按钮的默认行为(服务端)
  1.     protected override void Render(HtmlTextWriter writer)
  2.     {
  3.         WebControl delButton = FpSpread1.FindControl("Delete") as WebControl;
  4.         if (delButton != null)
  5.         {
  6.             delButton.Attributes.Add("onclick", "MultiDlete();return false;");
  7.         }

  8.         base.Render(writer);
  9.     }
复制代码

3、重写“删除”按钮的默认行为(客服端)
  1.     <script language="javascript" type="text/javascript">
  2.         function MultiDlete() {
  3.             var ss = FpSpread("FpSpread1");
  4.             if (ss != null) {
  5.                 ss.UpdatePostbackData();
  6.                 ss.CallBack("MultiDlete");
  7.             }
  8.         }
  9.     </script>
复制代码

4、删除用户选择的数据行
  1.     protected void FpSpread1_ButtonCommand(object sender, FarPoint.Web.Spread.SpreadCommandEventArgs e)
  2.     {
  3.         if (e.CommandName.Equals("MultiDlete"))
  4.         {
  5.             for (int r = FpSpread1.ActiveSheetView.RowCount - 1; r >= 0; r--)
  6.             {
  7.                 var check = FpSpread1.ActiveSheetView.Cells[r, 0].Value;
  8.                 if (check != null &amp;&amp; (Convert.ToInt32(check) == 1))
  9.                 {
  10.                     FpSpread1.ActiveSheetView.Rows.Remove(r, 1);
  11.                 }
  12.             }
  13.         }
  14.     }
复制代码


第二种:删除用户选中的所有行
1、重写“删除”按钮的默认行为(服务端)
  1.     protected override void Render(HtmlTextWriter writer)
  2.     {
  3.         WebControl delButton = FpSpread1.FindControl("Delete") as WebControl;
  4.         if (delButton != null)
  5.         {
  6.             delButton.Attributes.Add("onclick", "MultiDlete();return false;");
  7.         }

  8.         base.Render(writer);
  9.     }
复制代码

2、重写“删除”按钮的默认行为(客服端)
  1.     <script language="javascript" type="text/javascript">
  2.         function MultiDlete() {
  3.             var ss = FpSpread("FpSpread1");
  4.             if (ss != null) {
  5.                 ss.UpdatePostbackData();
  6.                 ss.CallBack("MultiDlete");
  7.                 ss.ClearSelection();
  8.             }
  9.         }
  10.     </script>
复制代码

3、删除用户选择的数据行
  1.     protected void FpSpread1_ButtonCommand(object sender, FarPoint.Web.Spread.SpreadCommandEventArgs e)
  2.     {
  3.         if (e.CommandName.Equals("MultiDlete"))
  4.         {
  5.             CellRange[] cRanges = FpSpread1.ActiveSheetView.GetSelections();

  6.             for (int i = cRanges.Length -1; i >= 0; i--)
  7.             {
  8.                 FpSpread1.ActiveSheetView.RemoveRows(cRanges[i].Row, cRanges[i].RowCount);   
  9.             }               
  10.         }
  11.     }
复制代码


源码下载:VS2010 + Spread 6.0.3505
4881_CustomDelete.zip (11.51 KB, 下载次数: 1268)

8 个回复

倒序浏览
zaze19
银牌会员   /  发表于:2012-12-25 10:35:00
沙发
按照此方法在4.0版本下IE会提示错误(提示:缺少对象),请问是怎么回事?另外,为什么chrome浏览器“删除”按钮点击不了?
回复 使用道具 举报
ZenosZeng讲师达人认证 悬赏达人认证
超级版主   /  发表于:2012-12-25 15:48:00
板凳
回复 2楼zaze19的帖子

zaze19 你好

请问你使用的 Spread 详细版本号是多少,IE是IE还是IE9呢,我这边好在同样的环境中进行测试。
回复 使用道具 举报
zaze19
银牌会员   /  发表于:2012-12-26 09:41:00
地板
回复 3楼dof的帖子

用的版本是v4.0.3525,IE是IE8,谢谢! (如果能成功,请附上附件,以便参考参考,看看是不是自己的代码有问题)
回复 使用道具 举报
zaze19
银牌会员   /  发表于:2012-12-26 10:06:00
5#
回复 3楼dof的帖子

用IETester测试了一下,版本为v4.0.3525,IE7也提示“缺少对象,当前脚本发生错误”,IE9中删除的“&#215;”图标是灰色的,点击不了。
回复 使用道具 举报
ZenosZeng讲师达人认证 悬赏达人认证
超级版主   /  发表于:2012-12-26 15:16:00
6#
回复 5楼zaze19的帖子

zaze19 你好

首先和你确认一下,你是新项目开发还是维护项目,如果是新项目我建议你使用最新的Spread .NET 6.0 产品。
回复 使用道具 举报
ZenosZeng讲师达人认证 悬赏达人认证
超级版主   /  发表于:2012-12-26 15:20:00
7#
回复 5楼zaze19的帖子

可将 var ss = FpSpread(&quot;FpSpread1&quot;);

修改为 var ss = document.getElementById(&quot;FpSpread1&quot;);
回复 使用道具 举报
zaze19
银牌会员   /  发表于:2012-12-28 09:16:00
8#
回复 7楼dof的帖子

谢谢
回复 使用道具 举报
ZenosZeng讲师达人认证 悬赏达人认证
超级版主   /  发表于:2013-6-17 10:45:00
9#
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部