|
|
Posted on 2007-11-24 12:40 CmSoft 阅读(5467) 评论(22) 编辑 收藏 所属分类: 技术之道
上接 ExtJS与.NET结合开发实例(Grid之数据显示、分页、排序篇),在此基础上实现批量删除功能。
实现的步骤如下:
1. 用WebService实现删除的功能(上篇有一园友提出用WebService实现,这里顺便说一下,取数据源也可以用WebService,大家可以参考删除的WebService自行实现,我这里就不在累述了)
新建一WebService文件,命名为: DeleteProject.asmx
代码如下:
 DeleteProject.asmx.cs
1 using System;
2 using System.Data;
3 using System.Linq;
4 using System.Web;
5 using System.Collections;
6 using System.Web.Services;
7 using System.Web.Services.Protocols;
8 using System.ComponentModel;
9 using System.Xml.Linq;
10 using BusinessObject.Projects; //dbml文件的引用
11 using Database;
12 namespace Web.Projects.OperProjects
13  {
14 /**//// <summary>
15 /// Summary description for DeleteProject
16 /// </summary>
17 [WebService(Namespace = "http://tempuri.org/")]
18 [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
19 [ToolboxItem(false)]
20 // To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line.
21 // [System.Web.Script.Services.ScriptService]
22 public class DeleteProject : System.Web.Services.WebService
23 {
24
25 [WebMethod]
26 public bool DelProject(string strProjects) //这里需要返回删除是否成功给ExtJS调用
27 {
28 bool result = false;
29 try
30 {
31 ProjectBaseInfoDataContext db = new ProjectBaseInfoDataContext();
32 var projects = from p in db.PROJECT_BASE_INFOs
33 where strProjects.IndexOf(p.PROJECT_NO) > 0
34 select p;
35 db.PROJECT_BASE_INFOs.DeleteAllOnSubmit(projects);
36 result = true;
37 }
38 catch {
39 result = false;
40 }
41
42 return result;
43 }
44 }
45 }
46
2.让我们再回到第一篇里的 GridForProjectLists.js文件里,在代码最后部分找到
id:'btnDel',
text:'批量删除',
tooltip:'删除',
iconCls:'remove',
handler:showDelDialog
修改handler:showDelDialog为hanlder:doDel
现在实现doDel这个function:
 doDel
1 function doDel() {
2 Ext.MessageBox.confirm('提示', '确实要删除所选的记录吗?',showResult);
3 }
4 function showResult(btn) {
5 if(btn=='yes') {
6 var row=gdProjects.getSelections();
7 var jsonData="";
8 for(var i=0,len=row.length;i<len;i++) {
9 var ss = row[i].get("PROJECT_NO");
10 if(i==0)
11 jsonData = jsonData + ss; //这样处理是为了删除的Lambda语句方便
12 else
13 jsonData = jsonData + ","+ ss; //这样处理是为了删除的Lambda语句方便
14 }
15 //alert(jsonData);
16 var conn = new Ext.data.Connection();
17 conn.request( {
18 url:"../Projects/OperProjects/DeleteProject.asmx/DelProject", //请注意引用的路径
19 params: {strProjects:jsonData},
20 method: 'post',
21 scope: this,
22 callback:function(options,success, response) {
23 if(success) {
24 Ext.MessageBox.alert("提示","所选记录成功删除!");
25 ds.load( {params: {start:0, limit:25}});
26 }
27 else
28 {Ext.MessageBox.alert("提示","所选记录删除失败!");}
29 }
30 })
31 }
32 };
以上代码加在gdProjects定义之后即可。
实现效果如下:
至此已实现Grid的批量删除功能。
后记:
由于从VS2008 Beta2转到了RTM版(俺得跟着大家一起走呀  ),原先的代码略有改动,主要体现在两处:
(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
Feedback
很不错,界面很漂亮
这个grid是extjs里面提供的吧?
楼主,原来调用WebService不需要额外的代码和扩展吗?
如何给WebService的WebMethod,传JSON对象参数和返回JSON对象结果的话,能支持吗?
@代码乱了
grid由extjs提供
@阿不
调用WebService不需要额外的代码和扩展,如果给WebService的WebMethod传JSON格式的string需要WebService里解析这个string
@CmSoft 在.NET中,如果给WebService加上ServiceScript attribute的话,它默认返回的就是一个JSON对象了。我的意思是说,能不能像asp.net ajax那样来使用WebService
--引用--------------------------------------------------
阿不: @CmSoft
在.NET中,如果给WebService加上ServiceScript attribute的话,它默认返回的就是一个JSON对象了。我的意思是说,能不能像asp.net ajax那样来使用WebService
--------------------------------------------------------
可以,需要写一个data.store的代理
@kevinmo
由Ext提供,另Ext 2.0最近Release了
博主请教单个的时候如何删除呢(也就是点击叉那个图片的时候删除本行的记录)?点击叉那个图片的时候是转到连接的那个页面,在那个页面可以删除,但我不想弹出那个页面而且能有批量删除的时候那个提示框,点击确定的时候再删除.
最近关注先生的系列文章颇多,我认为该谢谢jquery+asp.net进行数据操作的必要了!
ext是很漂亮,就是太大了。。。。郁闷
如果是网站应用的话。。。我还是用jQuery吧
感谢楼主的分享。
where strProjects.IndexOf(p.PROJECT_NO) > 0
这个判断有缺陷, 比如 strProjects = "11,12,13" 那么会把 id = 1, 2, 3 的记录也误判进去。 应该加上两侧的 "," 再用 IndexOf 判断。
另外用这个开发模式的话,我想操作权限控制可能都要是基于功能去分配,不能基于页面控制(否则 WebService 可能被恶意调用)。
最近也想开始用一点 Ext 了。
我懒就给核心代码吧,欢迎拍砖拍瓦。看不明白就查文档吧!
function updateEdit(){
var records = store.getModifiedRecords();
if(records){
for(var i=0;i<records.length;i++){
Ext.Ajax.request({
url: 'xml.php',
params: {
a:'u',
i:records[i].get('id'),
t:records[i].get('editorTitle'),
s:records[i].get('status'),
h:records[i].get('hot'),
c:records[i].get('channelHot')
}
});
}
store.rejectChanges();
}
}
@MIC
我也来个EditorGridPanel之批量修改仅供同行参考哦--这是标题
怎样对editorgridpanel 的数据合法性进行验证呢 类似于 addUserForm.form.isValid() 我这样写的 userEditorGrid.colModel.editor.isValid() 报错 说 userEditorGrid.colModel.editor is undefined
老大有没有一个完整的asp.net webservice+ext2.0 添加,删除,修改,显示的完整demo啊,谢谢,一直无从下手!!!
|