asp.net下利用MVC模式实现Extjs表格增删改查
在网上看到有很多人写extjs下的表格控件的增删改查,但是大多数都是直接从后台读取数据,很少有跟数据库进行交互的模式。
今天就来写一个这样的例子。欢迎大家交流指正。
首先简单介绍一下MVC模式,MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写。
通常模型对象负责在数据库中存取数据。
通常视图是依据模型数据创建的。
通常控制器负责从视图读取数据,控制用户输入,并向模型发送数据。
Ext.onReady(function () {
var csm = new Ext.grid.CheckboxSelectionModel({//创建checkbox对象
handleMouseDown: new Ext.emptyFn()
});
var cum = new Ext.grid.ColumnModel([
csm, //checkbox对象
{header: "用户ID", dataIndex: "id", sortable: true
},
{ header: '用户姓名', dataIndex: 'name', sortable: true,
editor: new Ext.grid.GridEditor(
new Ext.form.TextField({ allowBlank: false }))
},
{ header: '性别', dataIndex: 'sex', sortable: true,
editor: new Ext.grid.GridEditor(
new Ext.form.TextField({ allowBlank: false }))
}
]);
;
var store = new Ext.data.Store({
proxy: new Ext.data.HttpProxy({ url: 'UserData.aspx' }),
reader: new Ext.data.JsonReader({
totalProperty: 'totalCount', //json字符串中的字段,数据量大小
root: 'data'//json字符串中的字段
}, [
{ name: 'id' },
{ name: 'name' },
{ name: 'sex' }
]),
remoteSort: true
});
var Record = Ext.data.Record.create([
{ name: 'id', type: 'string' },
{ name: 'name', type: 'string' },
{ name: 'sex', type: 'string' }
]);
store.load({ params: { start: 0, limit: 5} }); //运行加载表格数据
var cumgrid = new Ext.grid.EditorGridPanel({
renderTo: 'cumGrid',
store: store,
stripeRows: true, //斑马线效果
viewConfig: {
forceFit: true,
columnsText: "显示的列",
sortAscText: "升序",
sortDescText: "降序"
},
height: 200,
width: 550,
sm: csm,
bbar: new Ext.PagingToolbar({
pageSize: 5, //每页信息条数
store: store,
autowidth: true,
autoHeight: true,
displayInfo: true,
prevText: "上一页",
nextText: "下一页",
refreshText: "刷新",
lastText: "最后页",
firstText: "第一页",
beforePageText: "当前页",
afterPageText: "共{0}页",
displayMsg: '显示第{0}条到第{1}条记录,一共{2}条',
emptyMsg: '没有记录'
}),
tbar: new Ext.Toolbar(['-', {
text: '添加一行',
handler: function () {
var win = new Ext.Window({
title: '添加用户',
layout: 'fit',
height: 300,
width: 300,
border: 0,
frame: true, //去除窗体的panel框架
plain: true,
html: '<iframe frameborder=0 width="100%" height="100%" allowtransparency="true" scrolling=auto src="addUser.htm"></iframe>'
});
win.show(); //显示窗口
}
}, '-', {
text: '删除一行',
handler: function () {
Ext.Msg.confirm('信息', '确定要删除?', function (btn) {
if (btn = 'yes') {
var id = "";
function getid() {
for (var i = 0; i < cumgrid.getSelectionModel().getSelections().length; i++) {
id += cumgrid.getSelectionModel().getSelections()[i].get("id");
id += ',';
}
};
getid(); //初始化选中行id字符串数组
Ext.Ajax.request({
url: "DelUserInfo.aspx",
method: "post",
params: { id: id },
success: function (response) {
Ext.Msg.alert("恭喜", "删除成功了!");
store.reload();
},
failure: function () {
Ext.Msg.alert("提 示", "删除失败了!");
}
})
}
});
}
}, '-', {
text: '保存',
handler: function () {
var m = store.getModifiedRecords().slice(0);
var jsonArray = [];
Ext.each(m, function (item) {
jsonArray.push(item.data);
})
if (false) {//判断条件
return;
} else {
// alert(Ext.encode(jsonArray))
Ext.Ajax.request({
//url: "Demo/Operator.aspx",
url: "SaveUserInfo.aspx",
method: "POST",
params: 'data=' + encodeURIComponent(Ext.encode(jsonArray)),
success: function (response, option) {
store.reload();
alert(response.responseText);
},
failure: function (response) {
store.reload();
alert(response.responseText)
Ext.Msg.alert("提示", "修改失败了!");
}
});
}
}
}, '-']),
cm: cum
});
cumgrid.render(); //刷新表格
});

表格界面如上图所示。增删改查分别通过,添加,删除,保存修改,和后台读取数据并分页实现。
public class UserBLL
{
public UserBLL()
{
//
//TODO: 在此处添加构造函数逻辑
//
} UserDao dao = new UserDao();
JsonHelper json = new JsonHelper();
DataTable dt = new DataTable();
//获取全部数据
public string GetUserInfo()
{
dt = dao.GetAllInfo();//从数据库中读取数据
json.success = true;
foreach (DataRow dr in dt.Rows) //将读取出的数据转换成字符串
{
json.AddItem("id", dr["id"].ToString());
json.AddItem("name", dr["name"].ToString());
json.AddItem("sex", dr["sex"].ToString());
json.ItemOk();
}
string jsons = json.ToString();
return jsons;
}
//根据id获取用户数据
public UserBean getUserInfosNoState(int id)
{
return dao.getUserInfosNoState(id);
}
//分页获取数据
public string GetUserInfoPage(int start, int limit)
{
JSONHelper json = new JSONHelper();
dt = dao.GetUserInfoPaging(start, limit); //从数据库中读取数据
json.success = true;
foreach (DataRow dr in dt.Rows) //将读取出的数据转换成字符串
{
json.AddItem("id", dr["id"].ToString());
json.AddItem("name", dr["name"].ToString());
json.AddItem("sex", dr["sex"].ToString());
json.ItemOk();
}
json.totlalCount = dao.GetAllUserCount();
string jsons = "";
if (json.totlalCount > )
{
jsons = json.ToString();
}
else
{
jsons = @"{success:false}";
}
return jsons;
}
//删除用户信息
public int DelUserInfos(int id)
{
return dao.DelUserInfos(id);
}
//更新用户信息
public int SaveUserInfo(UserBean user)
{
return dao.SaveUserInfo(user);
}
//添加用户信息
public int AddUserInfo(UserBean user)
{
return dao.AddUserInfo(user);
} }
public string ds = string.Empty;
public UserBLL ub = new UserBLL(); protected void Page_Load(object sender, EventArgs e)
{
string starts = Request.Form["start"];//获取读取数据的范围
string limits = Request.Form["limit"];
int index = Convert.ToInt32(starts);
int length = Convert.ToInt32(limits);
ds = ub.GetUserInfoPage(index, length);
}
增加数据:
AddUserInfo.aspx.cs:
UserBLL ub = new UserBLL();
protected void Page_Load(object sender, EventArgs e)
{
AddUserInfos();
} public void AddUserInfos() //添加数据
{
//获取姓名性别
string name = Request.Form["name"];
string sex = Request.Form["sex"];
UserBean user = new UserBean();
user.Name = name;
user.Sex = sex;
int count = ub.AddUserInfo(user);
if (count > )
Response.Write(@"{success:true}");
else
Response.Write(@"{success:false}");
}
删除数据部分:
DelUserInfo.aspx.cs:
需要注意因为从前台传来的是所有改变行所有数据id的json字符串,需要进行字符串分割获取到要删除行的id
UserBLL ub = new UserBLL();
protected void Page_Load(object sender, EventArgs e)
{
DeleteRoomInfo();
}
public void DeleteRoomInfo()
{
string id = Request.Form["id"];//获取要删除用户的id字符串
if (id != null)
{
string[] ids = id.Split(',');//将每一名用户的id分割存入字符串数组
try
{
foreach (string r in ids)
{
ub.DelUserInfos(Convert.ToInt32(r));//循环删除用户信息
}
Response.Write(@"{success:true}");
}
catch (Exception)
{
Response.Write(@"{success:false}");
} }
else
{
Response.Write(@"{success:false}");
}
}
修改数据部分:
SaveUserInfo.aspx.cs:
此处需要注意,因为前台传来的是所有改变行所有数据的json字符串,需要进行分割处理,先去掉多余的字符,在根据','分割成“数据名:数据值的形式”,再循环根据:进行分割
UserBLL ub = new UserBLL();
protected void Page_Load(object sender, EventArgs e)
{
SaveRoomInfo();
}
public void SaveRoomInfo()
{
int count=;
string data = Request.Form["data"];// 对传值过来的json字符串进行处理,分解成键值对 data = RemoveChars(data,"[");
data = RemoveChars(data, "]");
data = RemoveChars(data,"\"");
data = RemoveChars(data, "}");
data = RemoveChars(data, "{");
string[] field = data.Split(',');
string[] keyvalue;
for (int i = ; i < field.Length / ; i++)
{
UserBean user = new UserBean();
for (int j = i * , k = ; k < ; j++, k++)
{
keyvalue = field[j].Split(':');//将json字符串中的数据项名和数据项值分开,分别存入user对象中
if (keyvalue[] == "id")
{
user.Id = Convert.ToInt32(keyvalue[]);
}
else if (keyvalue[] == "name")
{
user.Name = keyvalue[];
}
else if (keyvalue[] == "sex")
{
user.Sex = keyvalue[];
}
}
count = ub.SaveUserInfo(user);
}
if (count > )
{
Response.Write("{success:'true'},{data:" + field[] + "}");
}
else
{
Response.Write("{success:'false'},{data:" + field[] + "}");
} } //删除字符串中某个字符
static string RemoveChars(string str, string remove)
{
if (string.IsNullOrEmpty(str) || string.IsNullOrEmpty(remove))
{
throw new ArgumentException("....");
} StringBuilder result = new StringBuilder(str.Length); Dictionary<char, bool> dictionary = new Dictionary<char, bool>(); foreach (char ch in remove)
{
dictionary[ch] = true;
} foreach (char ch in str)
{
if (!dictionary.ContainsKey(ch))
{
result.Append(ch);
}
} return result.ToString();
}
模型部分:
UserBean.cs:
public class UserDao
{
public UserDao()
{
//
//TODO: 在此处添加构造函数逻辑
//
} private DataTable dt;
public DataTable GetAllInfo()
{
try
{
return SqlHelper.ExecuteDataTable("select * from T_user");
}
catch(Exception){throw;}
}
//分页读取数据
public DataTable GetUserInfoPaging(int start, int limit)
{
try
{
return SqlHelper.ExecuteDataTable("select top " + limit + " * from T_user where id not in(select top " + start + " id from T_user order by id asc) order by id asc");
}
catch (Exception) { throw; }
} public UserBean getUserInfosNoState(int id)
{
try
{
dt = SqlHelper.ExecuteDataTable("select * from T_user where id=" + id);
UserBean user = new UserBean();
user.Id = int.Parse(dt.Rows[]["id"].ToString());
user.Name = dt.Rows[]["name"].ToString();
user.Sex = dt.Rows[]["sex"].ToString();
return user;
}
catch (Exception){ throw; }
} //获得用户总数
public int GetAllUserCount()
{
try
{
return (int)SqlHelper.ExecuteScalar("select count(*) from T_user");
}
catch (Exception) { throw; }
} //删除用户信息
public int DelUserInfos(int id)
{
try
{
int count = SqlHelper.ExecuteNonQuery("delete T_user where id=" + id);
return count;
}
catch (Exception){ throw; }
} //保存修改
public int SaveUserInfo(UserBean user)
{
try
{
int count = SqlHelper.ExecuteNonQuery("update T_user set name='" + user.Name + "',sex='" + user.Sex + "' where id=" + user.Id);
return count;
}
catch (Exception){ throw;}
} //新增用户
public int AddUserInfo(UserBean user)
{
try
{
int count = SqlHelper.ExecuteNonQuery("insert into T_user values('" + user.Name + "','" + user.Sex + "')");
return count;
}
catch (Exception)
{ throw; }
}
}
UserBean.cs
public class UserBean
{
public UserBean()
{
//
//TODO: 在此处添加构造函数逻辑
//
} private long id;
private string sex;
private string name; public long Id
{
get { return id; }
set { id = value; }
} public string Name
{
get { return name; }
set { name = value; }
} public string Sex
{
get { return sex; }
set { sex = value; }
}
}
asp.net下利用MVC模式实现Extjs表格增删改查的更多相关文章
- MVC模式的学生信息增删改查
准备:建一个名为 userdb的数据库.建一个student表,有stuid,stuname,gender三个字段.其中stuid为主键.j加入相应的驱动包,相应的JSTL标签 先看目录结构 代码: ...
- MVC模式实现登录以及增删改查之登录(一)
我在这里用的不是maven项目,用的一般的web项目,所以需要用到的架包需要自己去下载添加,在项目中,一定注意环境的配置,我用的是jre1.7 1 新建项目 2 建立好MVC的管理包,导入对应的架 ...
- 利用SQLite在android上实现增删改查
利用SQLite在android上实现增删改查 方法: 一.直接利用database.execSQL()方法输入完整sql语句进行操作 这种方法适用于复杂的sql语句,比如多表查询等等 这里适合于增删 ...
- 利用API方式进行数据库的增删改查
/* 将数据库的增删改查单独放进一个包 */ package com.itheima28.sqlitedemo.dao; import java.util.ArrayList; import java ...
- django 利用ORM对单表进行增删改查
牛小妹上周末,一直在尝试如何把数据库的数据弄到界面上.毕竟是新手,搞不出来,文档也看不懂.不过没关系,才刚上大学.今晚我们就来解释下,要把数据搞到界面的第一步.先把数据放到库里,然后再把数据从库里拿出 ...
- 手把手教你ASP.NET Core:使用Entity Framework Core进行增删改查
新建表Todo,如图 添加模型类 在"解决方案资源管理器"中,右键单击项目. 选择"添加" > "新建文件夹". 将文件夹命名为 Mo ...
- MVC中的Ajax与增删改查
自入手新项目以来,一直处于加班状态,博客也有两周没更,刚刚完成项目的两个模组,稍有喘息之机,写写关于项目中 的增删改查,这算是一个老生常谈的问题了,就连基本的教材书上都有.刚看书的时候,以为 没什么可 ...
- MVC中的Ajax与增删改查(一)
自入手新项目以来,一直处于加班状态,博客也有两周没更,刚刚完成项目的两个模组,稍有喘息之机,写写关于项目中 的增删改查,这算是一个老生常谈的问题了,就连基本的教材书上都有.刚看书的时候,以为 没什么可 ...
- Entity Framework应用:使用EF的DataBase First模式实现数据库的增删改查
在上一篇文章中讲解了如何生成EF的DBFirst模式,接下来讲解如何使用DBFirst模式实现数据库数据的增删改查 一.新增数据 新增一个Student,代码如下: static void Add() ...
随机推荐
- Java学习之二分查找算法
好久没写算法了.只记得递归方法..结果测试下爆栈了. 思路就是取范围的中间点,判断是不是要找的值,是就输出,不是就与范围的两个临界值比较大小,不断更新临界值直到找到为止,给定的集合一定是有序的. 自己 ...
- php调用com组件配置 以openoffice为例
什么是com组件? COM构架下,人们可以开发出各种各样的功能专一的组件,然后将它们按照需要组合起来,构成复杂的应用系统.COM与语言,平台无关的特性使所有的程序员均可充分发挥自己的才智与专长编写组件 ...
- POJ 2455 Secret Milking Machine(搜索-二分,网络流-最大流)
Secret Milking Machine Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 9658 Accepted: ...
- C与C++ 无参函数的区别
在<C++ 编程思想>:“关于无参函数声明,C与C++有很大的差别.在C语言中,声明int fun1(),意味着一个可以有任意数目和类型的函数:而在C++中,指的却是一个没有参数的函数”. ...
- A*算法的C语言实现
#include ”stdio.h“ #include “conio.h” #include ”assert.h“ #include “stdlib.h” #define MAPMAXSIZE 100 ...
- 4.I/O复用以及基于I/O复用的回射客户端/服务器
I/O复用:当一个或多个I/O条件满足时,我们就被通知到,这种能力被称为I/O复用. 1.I/O复用的相关系统调用 posix的实现提供了select.poll.epoll两类系统调用以及相关的函数来 ...
- QuartusII 中采用门级原语
QuartusII 中采用门级原语 默认的是前面第一个 为output 后面所有信号为输入 图中的工程实现的是 一个二选一多路选择器
- WPF: 针对Windows 8优化菜单栏和工具栏
原文 WPF: 针对Windows 8优化菜单栏和工具栏 目录 1. 关于菜单图标大小 2. 关于IsEnabled和工具栏图标 3. 针对.NET 3.x的菜单栏和工具栏外观 返回目录 1. 关于菜 ...
- 错误解决--oracle中出现ORA-01791: 不是 SELECTed 表达式 错误
Oracle数据库,执行下面语句出现错误“ORA-01791: 不是 SELECTed 表达式”: select distinct t.name from auth_employee t order ...
- KINGSO介绍
kingso_intro - Taocode KINGSO介绍 KINGSO是一种高效的垂直化的搜索引擎,其包含query解析.检索.过滤.统计.排序功能,不包含抓取部分.它对商品搜索做了针对性的优化 ...