ExtJS与.NET结合开发实例(Grid之批量删除篇)

上接ExtJS与.NET结合开发实例(Grid之数据显示、分页、排序篇),在此基础上实现批量删除功能。
实现的步骤如下:
1. 用WebService实现删除的功能(上篇有一园友提出用WebService实现,这里顺便说一下,取数据源也可以用WebService,大家可以参考删除的WebService自行实现,我这里就不在累述了)
新建一WebService文件,命名为:DeleteProject.asmx
代码如下:

ExtJS与.NET结合开发实例(Grid之批量删除篇)ExtJS与.NET结合开发实例(Grid之批量删除篇)DeleteProject.asmx.cs
<!--<br /><br /> <br /><br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /><br /> <a href="http://www.CodeHighlighter.com/" title="http://www.CodeHighlighter.com/">http://www.CodeHighlighter.com/</a><br /><br /> <br /><br /> -->1ExtJS与.NET结合开发实例(Grid之批量删除篇)usingSystem;
2ExtJS与.NET结合开发实例(Grid之批量删除篇)usingSystem.Data;
3ExtJS与.NET结合开发实例(Grid之批量删除篇)usingSystem.Linq;
4ExtJS与.NET结合开发实例(Grid之批量删除篇)usingSystem.Web;
5ExtJS与.NET结合开发实例(Grid之批量删除篇)usingSystem.Collections;
6ExtJS与.NET结合开发实例(Grid之批量删除篇)usingSystem.Web.Services;
7ExtJS与.NET结合开发实例(Grid之批量删除篇)usingSystem.Web.Services.Protocols;
8ExtJS与.NET结合开发实例(Grid之批量删除篇)usingSystem.ComponentModel;
9ExtJS与.NET结合开发实例(Grid之批量删除篇)usingSystem.Xml.Linq;
10ExtJS与.NET结合开发实例(Grid之批量删除篇)usingBusinessObject.Projects;//dbml文件的引用
11ExtJS与.NET结合开发实例(Grid之批量删除篇)usingDatabase;
12ExtJS与.NET结合开发实例(Grid之批量删除篇)namespaceWeb.Projects.OperProjects
13ExtJS与.NET结合开发实例(Grid之批量删除篇)ExtJS与.NET结合开发实例(Grid之批量删除篇)ExtJS与.NET结合开发实例(Grid之批量删除篇){
14ExtJS与.NET结合开发实例(Grid之批量删除篇)ExtJS与.NET结合开发实例(Grid之批量删除篇)/**////<summary>
15ExtJS与.NET结合开发实例(Grid之批量删除篇)///SummarydescriptionforDeleteProject
16ExtJS与.NET结合开发实例(Grid之批量删除篇)///</summary>

17ExtJS与.NET结合开发实例(Grid之批量删除篇)[WebService(Namespace="http://tempuri.org/")]
18ExtJS与.NET结合开发实例(Grid之批量删除篇)[WebServiceBinding(ConformsTo=WsiProfiles.BasicProfile1_1)]
19ExtJS与.NET结合开发实例(Grid之批量删除篇)[ToolboxItem(false)]
20ExtJS与.NET结合开发实例(Grid之批量删除篇)//ToallowthisWebServicetobecalledfromscript,usingASP.NETAJAX,uncommentthefollowingline.
21ExtJS与.NET结合开发实例(Grid之批量删除篇)//[System.Web.Script.Services.ScriptService]
22ExtJS与.NET结合开发实例(Grid之批量删除篇)publicclassDeleteProject:System.Web.Services.WebService
23ExtJS与.NET结合开发实例(Grid之批量删除篇)ExtJS与.NET结合开发实例(Grid之批量删除篇)ExtJS与.NET结合开发实例(Grid之批量删除篇){
24ExtJS与.NET结合开发实例(Grid之批量删除篇)
25ExtJS与.NET结合开发实例(Grid之批量删除篇)[WebMethod]
26ExtJS与.NET结合开发实例(Grid之批量删除篇)publicboolDelProject(stringstrProjects)//这里需要返回删除是否成功给ExtJS调用
27ExtJS与.NET结合开发实例(Grid之批量删除篇)ExtJS与.NET结合开发实例(Grid之批量删除篇)ExtJS与.NET结合开发实例(Grid之批量删除篇){
28ExtJS与.NET结合开发实例(Grid之批量删除篇)boolresult=false;
29ExtJS与.NET结合开发实例(Grid之批量删除篇)try
30ExtJS与.NET结合开发实例(Grid之批量删除篇)ExtJS与.NET结合开发实例(Grid之批量删除篇)ExtJS与.NET结合开发实例(Grid之批量删除篇){
31ExtJS与.NET结合开发实例(Grid之批量删除篇)ProjectBaseInfoDataContextdb=newProjectBaseInfoDataContext();
32ExtJS与.NET结合开发实例(Grid之批量删除篇)varprojects=frompindb.PROJECT_BASE_INFOs
33ExtJS与.NET结合开发实例(Grid之批量删除篇)wherestrProjects.IndexOf(p.PROJECT_NO)>0
34ExtJS与.NET结合开发实例(Grid之批量删除篇)selectp;
35ExtJS与.NET结合开发实例(Grid之批量删除篇)db.PROJECT_BASE_INFOs.DeleteAllOnSubmit(projects);
36ExtJS与.NET结合开发实例(Grid之批量删除篇)result=true;
37ExtJS与.NET结合开发实例(Grid之批量删除篇)}

38ExtJS与.NET结合开发实例(Grid之批量删除篇)ExtJS与.NET结合开发实例(Grid之批量删除篇)catchExtJS与.NET结合开发实例(Grid之批量删除篇){
39ExtJS与.NET结合开发实例(Grid之批量删除篇)result=false;
40ExtJS与.NET结合开发实例(Grid之批量删除篇)}

41ExtJS与.NET结合开发实例(Grid之批量删除篇)
42ExtJS与.NET结合开发实例(Grid之批量删除篇)returnresult;
43ExtJS与.NET结合开发实例(Grid之批量删除篇)}

44ExtJS与.NET结合开发实例(Grid之批量删除篇)}

45ExtJS与.NET结合开发实例(Grid之批量删除篇)}

46ExtJS与.NET结合开发实例(Grid之批量删除篇)

2.让我们再回到第一篇里的GridForProjectLists.js文件里,在代码最后部分找到

ExtJS与.NET结合开发实例(Grid之批量删除篇)id:'btnDel',
ExtJS与.NET结合开发实例(Grid之批量删除篇)text:'批量删除',
ExtJS与.NET结合开发实例(Grid之批量删除篇)tooltip:'删除',
ExtJS与.NET结合开发实例(Grid之批量删除篇)iconCls:'remove',
ExtJS与.NET结合开发实例(Grid之批量删除篇)handler:showDelDialog

修改handler:showDelDialog为hanlder:doDel
现在实现doDel这个function:

ExtJS与.NET结合开发实例(Grid之批量删除篇)ExtJS与.NET结合开发实例(Grid之批量删除篇)doDel
<!--<br /><br /> <br /><br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /><br /> <a href="http://www.CodeHighlighter.com/" title="http://www.CodeHighlighter.com/">http://www.CodeHighlighter.com/</a><br /><br /> <br /><br /> -->1ExtJS与.NET结合开发实例(Grid之批量删除篇)ExtJS与.NET结合开发实例(Grid之批量删除篇)functiondoDel()ExtJS与.NET结合开发实例(Grid之批量删除篇){
2ExtJS与.NET结合开发实例(Grid之批量删除篇)Ext.MessageBox.confirm('提示','确实要删除所选的记录吗?',showResult);
3ExtJS与.NET结合开发实例(Grid之批量删除篇)}

4ExtJS与.NET结合开发实例(Grid之批量删除篇)ExtJS与.NET结合开发实例(Grid之批量删除篇)functionshowResult(btn)ExtJS与.NET结合开发实例(Grid之批量删除篇){
5ExtJS与.NET结合开发实例(Grid之批量删除篇)ExtJS与.NET结合开发实例(Grid之批量删除篇)if(btn=='yes')ExtJS与.NET结合开发实例(Grid之批量删除篇){
6ExtJS与.NET结合开发实例(Grid之批量删除篇)varrow=gdProjects.getSelections();
7ExtJS与.NET结合开发实例(Grid之批量删除篇)varjsonData="";
8ExtJS与.NET结合开发实例(Grid之批量删除篇)ExtJS与.NET结合开发实例(Grid之批量删除篇)for(vari=0,len=row.length;i<len;i++)ExtJS与.NET结合开发实例(Grid之批量删除篇){
9ExtJS与.NET结合开发实例(Grid之批量删除篇)varss=row[i].get("PROJECT_NO");
10ExtJS与.NET结合开发实例(Grid之批量删除篇)if(i==0)
11ExtJS与.NET结合开发实例(Grid之批量删除篇)jsonData=jsonData+ss;//这样处理是为了删除的Lambda语句方便
12ExtJS与.NET结合开发实例(Grid之批量删除篇)else
13ExtJS与.NET结合开发实例(Grid之批量删除篇)jsonData=jsonData+","+ss;//这样处理是为了删除的Lambda语句方便
14ExtJS与.NET结合开发实例(Grid之批量删除篇)}

15ExtJS与.NET结合开发实例(Grid之批量删除篇)//alert(jsonData);
16ExtJS与.NET结合开发实例(Grid之批量删除篇)varconn=newExt.data.Connection();
17ExtJS与.NET结合开发实例(Grid之批量删除篇)ExtJS与.NET结合开发实例(Grid之批量删除篇)conn.request(ExtJS与.NET结合开发实例(Grid之批量删除篇){
18ExtJS与.NET结合开发实例(Grid之批量删除篇)url:"../Projects/OperProjects/DeleteProject.asmx/DelProject", //请注意引用的路径
19ExtJS与.NET结合开发实例(Grid之批量删除篇)ExtJS与.NET结合开发实例(Grid之批量删除篇)params:ExtJS与.NET结合开发实例(Grid之批量删除篇){strProjects:jsonData},
20ExtJS与.NET结合开发实例(Grid之批量删除篇)method:'post',
21ExtJS与.NET结合开发实例(Grid之批量删除篇)scope:this,
22ExtJS与.NET结合开发实例(Grid之批量删除篇)ExtJS与.NET结合开发实例(Grid之批量删除篇)callback:function(options,success,response)ExtJS与.NET结合开发实例(Grid之批量删除篇){
23ExtJS与.NET结合开发实例(Grid之批量删除篇)ExtJS与.NET结合开发实例(Grid之批量删除篇)if(success)ExtJS与.NET结合开发实例(Grid之批量删除篇){
24ExtJS与.NET结合开发实例(Grid之批量删除篇)Ext.MessageBox.alert("提示","所选记录成功删除!");
25ExtJS与.NET结合开发实例(Grid之批量删除篇)ExtJS与.NET结合开发实例(Grid之批量删除篇)ds.load(ExtJS与.NET结合开发实例(Grid之批量删除篇){params:ExtJS与.NET结合开发实例(Grid之批量删除篇){start:0,limit:25}});
26ExtJS与.NET结合开发实例(Grid之批量删除篇)}

27ExtJS与.NET结合开发实例(Grid之批量删除篇)else
28ExtJS与.NET结合开发实例(Grid之批量删除篇)ExtJS与.NET结合开发实例(Grid之批量删除篇)ExtJS与.NET结合开发实例(Grid之批量删除篇){Ext.MessageBox.alert("提示","所选记录删除失败!");}
29ExtJS与.NET结合开发实例(Grid之批量删除篇)}

30ExtJS与.NET结合开发实例(Grid之批量删除篇)}
)
31ExtJS与.NET结合开发实例(Grid之批量删除篇)}

32ExtJS与.NET结合开发实例(Grid之批量删除篇)}
;

以上代码加在gdProjects定义之后即可。

实现效果如下:
ExtJS与.NET结合开发实例(Grid之批量删除篇)

至此已实现Grid的批量删除功能。
后记:
由于从VS2008 Beta2转到了RTM版(俺得跟着大家一起走呀ExtJS与.NET结合开发实例(Grid之批量删除篇)),原先的代码略有改动,主要体现在两处:
(1)Web.config文件中的
<add assembly="System.Data.DataSetExtensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
版本号在beta里是2.0.0.0,现为3.5.0.0
(2)LINQ的变化,原先的删除使用RemoveAll+SubmitChange的方式,现在为DeleteAllOnSubmit