运行截图:
PageBar.js:
1 /* 2 * 说明: 3 * 整体思想,1.第一页时不显示:首页,上一页, 4 * 2.最后一页时不显示:下一页,尾页 5 * 3.中间有 5 页导航, 6 * 若:3.1.(总页数<5),就显示多少, 7 * 3.2.(总页数>5),点击页码值 <=3 背景为灰色还在那个位置, 8 * 点击页码值 >3 背景为灰色的始终在中间, 9 * 点击页码值 为最后三个,背景为灰色的还在那个位置 10 * 4.后面追加一个跳转项 11 * 5.显示不显示一共多少页,纠结中...... 12 */ 13 //添加实用集 14 /// <reference path="Utility.js" /> 15 16 //总页数:要求对象请求一次更新一次 17 var pageCount = false; 18 ////请求页面值 19 //var pageIndex = false; 20 //页码阵列点击函数名 21 var FUN = false; 22 //表名称标识 23 var TBLNAME = false; 24 25 //页码条容器 26 function pageNavigatorPanel() { 27 var pnp = GetObject(arguments[0]); 28 //预留样式: 29 return pnp; 30 }; 31 32 //创建跳转标签 33 function PageGoto() { 34 return PageTemplate("跳转", "page", "pGoto", arguments); 35 }; 36 37 //创建尾页标签 38 function PageTrailer() { 39 return PageTemplate("尾页", "page", "pTrailer", arguments); 40 }; 41 42 //创建下一页标签 43 function PageNext() { 44 return PageTemplate("下一页", "page", "pNext", arguments); 45 }; 46 47 //创建上一页标签 48 function PagePrevious() { 49 return PageTemplate("上一页", "page", "pPrevious", arguments); 50 }; 51 52 //创建首页标签 53 function PageFirst() { 54 return PageTemplate("首页", "page", "pFirst", arguments); 55 }; 56 57 //创建页码阵列 元素id="Nav"+tit 某阵列中的元素被点击之后为其 class 添加 pageB 样式 58 function PageNavigatorItem(tit) { 59 return PageTemplate(tit, "page", "Nav" + TBLNAME + tit, arguments); 60 }; 61 62 //创建标签母版 如需要style在外部重新定义 63 function PageTemplate(tit, cla, idn, args) { 64 var pTemplate = document.createElement("a"); 65 pTemplate.title = tit; 66 pTemplate.className = cla; 67 pTemplate.id = idn; 68 //pTemplate.style = sty; 69 pTemplate.innerHTML = tit; 70 //根据 Request("get", "SList.ashx?pi=" + arguments[0] + "&name=" + arguments[1], 。。。。请求条件只要两个参数即可。 71 var hrf = "javascript:" + FUN + "("; 72 var arg3 = arguments[3]; 73 if (arg3 != null) {// && arg3.length > 1) { 74 for (var i = 0; i < 1; i++) { 75 hrf += arg3[i] + ",""; 76 } 77 //hrf = hrf.substr(0, hrf.length - 1); 78 hrf += TBLNAME + """; 79 } 80 hrf += ");"; 81 pTemplate.href = hrf; 82 return pTemplate; 83 }; 84 //清空PageBar 85 function EmptyPageBar() { 86 GetObject(arguments[0]).innerHTML =""; 87 }; 88 //根据请求页码显示分页条. 89 function Paging(panelId, pageindex, funNavigateOnClickName, tblName) { 90 EmptyPageBar(panelId); 91 FUN = funNavigateOnClickName; 92 TBLNAME = tblName; 93 var pnp = pageNavigatorPanel(panelId); 94 if (pageCount == 0) {//不足一页:显示第一页 95 pnp.appendChild(PageNavigatorItem(1, 1)); 96 } 97 else { 98 //1.首页显示条件 99 if (pageCount > 5 && pageindex > 3) {//若第一页不再阵列中就显示: 100 pnp.appendChild(PageFirst(1));//首页 101 } 102 //2.上一页显示条件 103 if (pageindex != 1) {//若不是第一页就显示: 104 pnp.appendChild(PagePrevious(pageindex - 1));//上一页 105 } 106 //3.页码条阵列显示 107 if (pageCount < 6) {//5页之内:样式点击那个哪个背景为灰色。 108 for (var i = 1; i <= pageCount; i++) {//添加和pageCount相等的页码条阵列 109 pnp.appendChild(PageNavigatorItem(i, pageindex)); 110 } 111 } else {//大于5页(2 < pageindex < pageCount-1)的样式:灰色背景 112 //3.1前三个跟着走 113 if (pageindex <= 3) { 114 for (var i = 1; i < 6; i++) { 115 pnp.appendChild(PageNavigatorItem(i, pageindex)); 116 } 117 } 118 //3.2一直在中间 119 if (3 < pageindex && pageindex < pageCount - 2) { 120 for (var i = pageindex - 2; i < pageindex + 3; i++) { 121 pnp.appendChild(PageNavigatorItem(i, pageindex)); 122 } 123 } 124 //3.3后三个跟着走 125 if (pageindex >= pageCount - 2) { 126 for (var i = pageCount - 4; i <= pageCount; i++) { 127 pnp.appendChild(PageNavigatorItem(i, pageindex)); 128 } 129 } 130 } 131 //4.下一页显示条件 132 if (pageindex < pageCount) {//若不是最后一页就显示: 133 pnp.appendChild(PageNext(pageindex + 1));//下一页 134 } 135 //5.尾页显示条件(若最后一页不再阵列中) 136 if (pageindex < pageCount - 2) { 137 pnp.appendChild(PageTrailer(pageCount));//尾页 138 } 139 //为点击元素附加类样式pageB,并且禁用a标签。 140 var aTag = GetObject("Nav" + TBLNAME + pageindex); 141 aTag.className += " pageB"; 142 aTag.removeAttribute("href"); 143 //下面这个无效 144 //aTag.onclick = function () { return false; }; 145 //增加跳转条件 146 if (pageCount > 18) {//页数大于18 才有显示的必要 147 //跳转输入框变量 148 var gt = ' 至第<input type="text" id="pGoto" style="border:1px solid rgb(206,206,206); 31px;height:19px;margin:1px 0;text-align:center;" />页 '; 149 pnp.innerHTML += gt; 150 pnp.appendChild(PageGoto(parseInt(GetObject("pGoto").value)));//NaN 151 } 152 } 153 };
修改后更通用的
PageBar.js
/* Author: * By Wang * * 说明: * 整体思想,1.第一页时不显示:首页,上一页, * 2.最后一页时不显示:下一页,尾页 * 3.中间有 5 页导航, * 若:3.1.(总页数<5),就显示多少, * 3.2.(总页数>5),点击页码值 <=3 背景为灰色还在那个位置, * 点击页码值 >3 背景为灰色的始终在中间, * 点击页码值 为最后三个,背景为灰色的还在那个位置 * 4.后面追加一个跳转项 * 5.显示不显示一共多少页,纠结中...... * 主函数:Paging */ //添加实用集 /// <reference path="Utility.js" /> //总页数:要求对象请求一次更新一次 //var pageCount = false; ////请求页面值 //var pageIndex = false; //页码阵列点击函数名 var FUN = false; var IDPR = "Page"; //页码条容器 function pageNavigatorPanel() { var pnp = GetObject(arguments[0]); //预留样式: return pnp; }; //创建跳转标签 function PageGoto() { return PageTemplate("跳转", "page", IDPR + "Goto", arguments); }; //创建尾页标签 function PageTrailer() { return PageTemplate("尾页", "page", IDPR + "Trailer", arguments); }; //创建下一页标签 function PageNext() { return PageTemplate("下一页", "page", IDPR + "Next", arguments); }; //创建上一页标签 function PagePrevious() { return PageTemplate("上一页", "page", IDPR + "Previous", arguments); }; //创建首页标签 function PageFirst() { return PageTemplate("首页", "page", IDPR + "First", arguments); }; //创建页码阵列 元素id="Nav"+tit 某阵列中的元素被点击之后为其 class 添加 pageB 样式 function PageNavigatorItem(tit) { return PageTemplate(tit, "page", IDPR + tit, arguments);//默认有一个page样式 }; //创建标签母版: tit:显示内容,cla:样式类名,idn:id名称,args:参数 function PageTemplate(tit, cla, idn, args) { var pTemplate = document.createElement("a"); pTemplate.title = tit; pTemplate.className = cla; pTemplate.id = idn; //pTemplate.style = sty; pTemplate.innerHTML = tit; //点击执行的js函数 var hrf = "javascript:" + FUN + "("; var arg3 = arguments[3]; //if (arg3 != null && arg3.length > 1) { //for (var i = 0; i < 1; i++) { hrf += ("'" + idn + "',"); hrf += arg3[0]; //} //} hrf += ");"; pTemplate.href = hrf; return pTemplate; }; //清空PageBar function EmptyPageBar() { GetObject(arguments[0]).innerHTML = ""; }; //根据请求页码显示分页条. function Paging(panelId, pageindex, pageCount, pageTagClickFuncName) { EmptyPageBar(panelId); FUN = pageTagClickFuncName; var pnp = pageNavigatorPanel(panelId); if (pageindex == 0) { pnp.innerHTML = "<strong color='red'>对不起,没有数据...</strong>"; return; } if (pageCount == 0) {//不足一页:显示第一页 pnp.appendChild(PageNavigatorItem(1)); } else { //1.首页显示条件 if (pageCount > 5 && pageindex > 3) {//若第一页不再阵列中就显示: pnp.appendChild(PageFirst(1));//首页 } //2.上一页显示条件 if (pageindex != 1) {//若不是第一页就显示: pnp.appendChild(PagePrevious(pageindex - 1));//上一页 } //3.页码条阵列显示 if (pageCount < 6) {//5页之内:样式点击那个哪个背景为灰色。 for (var i = 1; i <= pageCount; i++) {//添加和pageCount相等的页码条阵列 pnp.appendChild(PageNavigatorItem(i)); } } else {//大于5页(2 < pageindex < pageCount-1)的样式:灰色背景 //3.1前三个跟着走 if (pageindex <= 3) { for (var i = 1; i < 6; i++) { pnp.appendChild(PageNavigatorItem(i)); } } //3.2一直在中间 if (3 < pageindex && pageindex < pageCount - 2) { for (var i = pageindex - 2; i < pageindex + 3; i++) { pnp.appendChild(PageNavigatorItem(i)); } } //3.3后三个跟着走 if (pageindex >= pageCount - 2) { for (var i = pageCount - 4; i <= pageCount; i++) { pnp.appendChild(PageNavigatorItem(i)); } } } //4.下一页显示条件 if (pageindex < pageCount) {//若不是最后一页就显示: pnp.appendChild(PageNext(pageindex + 1));//下一页 } //5.尾页显示条件(若最后一页不再阵列中) if (pageindex < pageCount - 2) { pnp.appendChild(PageTrailer(pageCount));//尾页 } //增加跳转条件 if (pageCount > 10) {//页数大于10 才有显示的必要 //跳转输入框变量 var gt = ' 至第<input type="text" id="PageGotoIndex" style="border:1px solid rgb(206,206,206); 31px;height:19px;margin:1px 0;text-align:center;" />页 '; pnp.innerHTML += gt; pnp.appendChild(PageGoto(parseInt(GetObject("PageGotoIndex").value)));//NaN } } //为点击元素附加类样式pageB,并且禁用a标签。 var aTag = GetObject(IDPR + pageindex); if (typeof (aTag) != "undefined") { aTag.className += " pageB"; aTag.removeAttribute("href"); } //下面这个无效 //aTag.onclick = function () { return false; }; };
Utility.js
1 /* 2 * js实用工具箱 3 */ 4 5 //根据id获取对象:传递一个参数id 6 function GetObject() { 7 return document.getElementById(arguments[0]); 8 }; 9 10 //创建对象 11 function SetObject() { 12 return document.createElement(arguments[0]); 13 }; 14 15 //根据id获取对象:指示在浏览器中是否隐藏{false:"block",ture:"none"} 16 function Display(id, bool) { 17 var dis = "block"; 18 if (bool) 19 dis = "none"; 20 GetObject(id).style.display = dis; 21 }; 22 23 //将从集合中转换出来的Json类型时间格式(/Date(308592000000)/)转换成正常格式spli="-"(year-month-day) 24 function GetDateFromJsonDate(jsonDate, spli) { 25 if (spli == null || spli == undefined) 26 //spli = "/";//数据插入失败 27 spli = "-"; 28 // \/Date(308592000000)\/ 29 // /Date(308592000000)/ 30 var fakeDate = arguments[0]; 31 //1.取数字转换为十进制整数 32 fakeDate = fakeDate.match(/d+/);//1.推荐.保险 33 //fakeDate = fakeDate.replace("/", "").replace("Date(", "").replace(")", "").replace("/", "");//2. 34 //fakeDate = fakeDate.substring(6, fakeDate.length - 2); 35 //2.解析为十进制数字 36 var dec = parseInt(fakeDate, 10); 37 //3.获取date对象 38 var date = new Date(dec) 39 //4.拼接格式化 40 var day = date.getDate(); 41 var mon = date.getMonth() + 1; 42 return date.getFullYear() + spli + (mon < 10 ? "0" + mon : mon) + spli + (day < 10 ? "0" + day : day); 43 }; 44 45 //获取AJAX中的异步对象 46 function GetXHR() { 47 var XHR = false; 48 /* try { 49 XHR = new ActiveXObject("Msxml2.XMLHTTP"); // ie msxml3.0+ 50 } catch (M2) { 51 try { 52 XHR = new ActiveXObject("Microsoft.XMLHTTP"); //ie msxml2.6 53 } catch (Mt) { 54 XHR = false; 55 } 56 } 57 if (!XHR && typeof XMLHttpRequest != 'undefined') {// Firefox, Opera 8.0+, Safari 58 XHR = new XMLHttpRequest(); 59 }*/ 60 XHR = new XMLHttpRequest(); 61 return XHR; 62 }; 63 64 //实现异步对象的Request请求 65 function Request(method, url, iscache, funNameDoResponse, funNameDoErrorBystatus, send) { 66 var xhr = GetXHR(); 67 xhr.open(method, url, true); 68 if (method.toLowerCase() == "post") //application/x-www-form-urlencoded 69 xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); 70 if (iscache) 71 xhr.setRequestHeader("If-Modified-Since", "0"); 72 xhr.onreadystatechange = function () { 73 if (xhr.readyState == 4) { 74 if (xhr.status == 200) { 75 //如果是值是空 json数组是null ,而不是 ""="" 76 var cont = xhr.responseText;//{"Id":1,"Math":null,"English":40} 77 //将json 字符串传入--> 78 funNameDoResponse(cont); 79 } else { 80 if (funNameDoErrorBystatus != null) 81 funNameDoErrorBystatus(xhr.status); 82 } 83 } 84 }; 85 xhr.send(send); 86 };
PageBarStyle.css
1 .page { 2 background-color: rgba(255, 255, 255, 1.00); 3 text-decoration: none; /*去掉下滑线*/ 4 color: rgb(102,102,102); 5 /*align-content: center;*/ 6 font-size: 12px; 7 font-family: 'MS PMincho'; 8 border: 1px solid rgb(206,206,206); 9 padding: 5px 8px; 10 margin: 1px; 11 } 12 13 a.page:hover { 14 cursor: pointer; 15 color: rgb(0,165,97); 16 } 17 /**/ 18 /* a[class*="pageB"]:visited { 19 }*/ 20 21 /*MS PMincho*/ 22 .pageB { 23 /*padding: 5px 8px; 重写要>=起效*/ 24 cursor: text; 25 font-weight:bolder; 26 background-color: rgb(206,206,206); 27 color: rgb(255,255,255); 28 }
List.html
1 <!DOCTYPE html> 2 <html xmlns="http://www.w3.org/1999/xhtml"> 3 <head> 4 <title>学生信息列表</title> 5 <link href="CSS/PageBarStyle.css" rel="stylesheet" /> 6 <style> 7 .center { 8 position: relative; 9 left: 50%; 10 top: 50%; 11 } 12 13 table { 14 margin: 20px; 15 } 16 17 td { 18 text-align: center; 19 padding: 6px; 20 margin: 5px; 21 border: 1px solid #f00; 22 } 23 24 p { 25 font-size: xx-large; 26 color: #0026ff; 27 padding: 5px; 28 text-align: center; 29 } 30 31 .Add { 32 display: none; 33 position: fixed; 34 left: 50%; 35 top: 50%; 36 border: 1px solid #b200ff; 37 padding: 10px 0 0 10px; 38 background-color: #ff006e; 39 z-index: 110; 40 opacity: 0.8; 41 font-weight: 800; 42 } 43 44 .button { 45 margin: 8px 10px 0 auto; 46 padding: 5px; 47 float: right; 48 } 49 50 input[type=button] { 51 margin-left: 15px; 52 } 53 54 input[type=text] { 55 margin: 2px; 56 } 57 </style> 58 <script src="JS/Utility.js"></script> 59 <script src="JS/PageBar.js"></script> 60 <script type="text/javascript"> 61 var tblRowId = false; 62 var tblScore = false; 63 var tblStudent = false; 64 var Modify = false; 65 //辅助 66 function Error() { 67 alert("未知原因,操作失败"); 68 Display("scoAdd", true); 69 Display("stuAdd", true);// 70 }; 71 function CheckInput() { 72 //数据库表示可以为空返回 true 73 //if (txtName.value == "") { 74 // alert("请输入姓名"); 75 // return false; 76 //} 77 //else if (txtAge.value == "") { 78 // alert("请输入年龄"); 79 // return false; 80 //} 81 //else if (txtGender.value == "") { 82 // alert("请输入性别"); 83 // return false; 84 //} 85 //else if (txtCID.value == "") { 86 // alert("请输入班级ID"); 87 // return false; 88 //} 89 //else if (txtBirthday.value == "") { 90 // alert("请输入日期"); 91 // return false; 92 //} 93 return true; 94 }; 95 function Cancel() { 96 Modify = false;//1. 97 Display(arguments[0], true); 98 }; 99 //End辅助 100 //删除操作 101 function DeleteCascade() { 102 //遍历比较id值 103 //var tbl = GetObject("tblSco"); 104 var length = tblScore.rows.length; 105 for (var i = 0; i < length; i++) { 106 var ro = tblScore.rows.item(i) 107 if (ro.childNodes[0].innerHTML == tblRowId) { 108 // if (ro.id == "sco" + tblRowId) { 109 tblScore.deleteRow(i); 110 tblRowId = false; 111 return; 112 } 113 } 114 tblRowId = false; 115 }; 116 function DeleteResult() {//实际情况下删除后要更新pageCount的,不然删除后,再跳转最后一页,什么都没有了,或出现错误。 117 if (arguments[0] == 1) { 118 alert("删除成功"); 119 //界面删除stu 120 //var roi = GetObject("stu" + tblRowId).getAttribute("name"); 121 //GetObject("tblStu").deleteRow(roi); 122 //这样删除是错误的,表的行是动态变化的, 123 //GetObject("tblStu").deleteRow(tblStuRowIndex);//行索引是从 0 开始的 124 //var tbl = GetObject("tblStu"); 125 length = tblStudent.rows.length; 126 for (var i = 0; i < length; i++) { 127 if (tblStudent.rows.item(i).childNodes[0].innerHTML == tblRowId) { 128 tblStudent.deleteRow(i); 129 break; 130 } 131 } 132 DeleteCascade(); 133 return; 134 } 135 alert("删除失败"); 136 }; 137 function Delete() { 138 if (confirm("确定要删除吗?")) { 139 tblRowId = arguments[0]; 140 var send = "id=" + tblRowId; 141 Request("POST", "NonQuery.ashx", false, DeleteResult, null, send); 142 // Request("get", "NonQuery.ashx?" + send, false, DeleteResult, null, null); 143 } 144 }; 145 //End删除操作 146 //添加 147 function AddScoResult() { 148 Display("scoAdd", true);//无论结果如何都关闭成绩弹出框 149 if (arguments[0] == 1) { 150 alert("添加成功"); 151 return; 152 } 153 Error(); 154 }; 155 function AddStuResult() { 156 Display("stuAdd", true);//结果回来然后关闭弹出框 157 var cont = arguments[0]; 158 if (cont >= 1) {//学生插入成功:返回@@identity :自增id identity(1,1) 159 InitScoAdd(); 160 //成绩没有Check:一定会在数据库添加。 161 Display("scoAdd", false); 162 txtId.value = parseInt(cont); 163 //这里通过对比表格的 行数据的ID值 。。。。。更新UI 164 // OK(2); 165 return; 166 } 167 Error(); 168 }; 169 var txtName, txtAge, txtGender, txtCID, txtBirthday; 170 function InitStuAdd() { 171 //若输入框已经实例化了,修改后会自动有值 172 if (txtName == undefined || txtName == false) { 173 txtName = GetObject("txtName"); 174 txtAge = GetObject("txtAge"); 175 txtGender = GetObject("txtGender"); 176 txtCID = GetObject("txtCID"); 177 txtBirthday = GetObject("txtBirthday"); 178 } 179 }; 180 var txtId, txtMath, txtEnglish; 181 function InitScoAdd() { 182 if (txtId == undefined || txtId == false) { 183 txtId = GetObject("txtId"); 184 txtMath = GetObject("txtMath"); 185 txtEnglish = GetObject("txtEnglish"); 186 } 187 }; 188 function Add() { 189 //增加stu成功后才显示增加sco否则不显示。 190 Display("stuAdd", false); 191 //初始化输入框对象 192 InitStuAdd(); 193 // OK(1); 194 }; 195 //End添加 196 //修改 197 function AppendConcelButton() { 198 var btnCnl = document.createElement("input"); 199 btnCnl.type = "button"; 200 btnCnl.onclick = function () { 201 Cancel("scoAdd");//点击取消按钮, 202 }; 203 btnCnl.value = "取消"; 204 return btnCnl; 205 }; 206 function RefreshStuUI() { 207 var row = GetObject(tblRowId);//存在视觉性 Bug !!! 208 //row.firstElementChild.innerHTML = txtId.value; 209 row.children.item(1).innerHTML = txtName.value; 210 row.childNodes[2].innerHTML = txtAge.value; 211 row.childNodes[3].innerHTML = txtGender.value; 212 row.children.item(4).innerHTML = txtCID.value; 213 row.childNodes[5].innerHTML = txtBirthday.value; 214 tblRowId = false; 215 }; 216 function ModifyStuResult() { 217 if (arguments[0] == 1) { 218 alert("修改成功"); 219 RefreshStuUI(); 220 } else { 221 alert("修改失败"); 222 } 223 Cancel("stuAdd");//无论成功失败都关闭。 224 }; 225 function RefreshScoUI() { 226 var row = GetObject(tblRowId);//存在视觉性 Bug !!! 227 row.childNodes[1].innerHTML = txtMath.value; 228 row.childNodes[2].innerHTML = txtEnglish.value; 229 tblRowId = false; 230 }; 231 function ModifyScoResult() { 232 if (arguments[0] == 1) { 233 alert("修改成功"); 234 RefreshScoUI(); 235 } else { 236 alert("修改失败"); 237 } 238 Cancel("scoAdd");//无论成功失败都关闭。 239 }; 240 function InitScoModify() { 241 InitScoAdd(); 242 //给单元格赋值 243 var row = GetObject(tblRowId); 244 txtId.value = row.firstChild.innerHTML; 245 // txtId.value = row.firstElementChild.innerHTML; 246 txtMath.value = row.children.item(1).innerHTML; 247 txtEnglish.value = row.childNodes[2].innerHTML; 248 var ADiv = GetObject("Action"); 249 if (ADiv.childElementCount == 1) 250 // ADiv.insertBefore(AppendConcelButton()); 251 ADiv.appendChild(AppendConcelButton()); 252 }; 253 function InitStuModify() { 254 InitStuAdd(); 255 var row = GetObject(tblRowId); 256 //txtId.value = row.firstElementChild.innerHTML; 257 txtName.value = row.children.item(1).innerHTML; 258 txtAge.value = row.childNodes[2].innerHTML; 259 txtGender.value = row.childNodes[3].innerHTML; 260 txtCID.value = row.children.item(4).innerHTML; 261 txtBirthday.value = row.childNodes[5].innerHTML; 262 } 263 function Modified() {//传递ID 264 tblRowId = arguments[0] + arguments[1]; 265 if (arguments[0] == "sco") { 266 Display("scoAdd", false); 267 Modify = true;//开启修改模式,然后,两种情况下关闭:1.点击取消。2.xhr.send()之后。 268 InitScoModify(); 269 } else { 270 //stu 271 Display("stuAdd", false); 272 Modify = true; 273 InitStuModify(); 274 } 275 }; 276 //End修改 277 //确定 278 function OK() { 279 if (arguments[0] == 1) {//stu 280 if (CheckInput()) {//发送数据 281 var send = "name=" + txtName.value + "&age=" + txtAge.value + "&gender=" + txtGender.value + "&cid=" + txtCID.value + "&birthday=" + txtBirthday.value; 282 if (!Modify) 283 Request("POST", "NonQuery.ashx", false, AddStuResult, Error, send); 284 else 285 Request("POST", "NonQuery.ashx?actionId=" + tblRowId.toString().substr(3), false, ModifyStuResult, Error, send); 286 } 287 } else {//sco 288 var send = "sid=" + txtId.value + "&math=" + txtMath.value + "&english=" + txtEnglish.value; 289 if (!Modify) 290 Request("POST", "NonQuery.ashx", false, AddScoResult, Error, send); 291 else 292 Request("POST", "NonQuery.ashx?actionId=" + tblRowId.toString().substr(3), false, ModifyScoResult, Error, send);// 293 }//看看是否进入下一步。:可以, 294 Modify = false;//2. 295 }; 296 function RemoveRowToTable() { 297 var tbl = arguments[0]; 298 var i = tbl.rows.length - 2;//为不足8行除错 299 if (tbl.rows.length > 3) 300 for (; i > 1; i--) {//5行数据 倒着删 301 tbl.deleteRow(i); 302 } 303 }; 304 function InsertRowTotblSco() { 305 var tblScoreRow = tblScore.insertRow(arguments[0]); 306 //tblScoreRow.setAttribute("name", arguments[0]); 307 //为了对ID进行区别 308 tblScoreRow.id = "sco" + arguments[1]; //设置当前行的id值 309 // 310 var td0 = tblScoreRow.insertCell(-1);//这个没有提示~~(但是有这个方法) 311 td0.innerHTML = arguments[1]; 312 ////火狐下不兼容 313 //var td1 = tblScoreRow.insertBefore(document.createElement("td")); 314 var td1 = tblScoreRow.insertCell(-1); 315 td1.innerHTML = arguments[2]; 316 // 317 var td2 = tblScoreRow.appendChild(document.createElement("td")); 318 td2.innerHTML = arguments[3]; 319 // 320 var td3 = tblScoreRow.insertCell(-1); 321 //第一种:显示传参 322 td3.innerHTML = "<a href='javascript:Modified("sco"," + arguments[1] + ");'>修改</a>"; 323 }; 324 function InsertRowTotblStu() { 325 var tblStudentRow = tblStudent.insertRow(arguments[0]);//arguments[0]=row的索引 326 //tblStudentRow.setAttribute("name", arguments[0]); 327 328 tblStudentRow.id = "stu" + arguments[1]; 329 var td0 = tblStudentRow.insertCell(-1); 330 td0.innerHTML = arguments[1]; 331 var td1 = tblStudentRow.insertCell(-1); 332 td1.innerHTML = arguments[2]; 333 var td2 = tblStudentRow.insertCell(-1); 334 td2.innerHTML = arguments[3]; 335 var td3 = tblStudentRow.insertCell(-1); 336 td3.innerHTML = arguments[4]; 337 var td4 = tblStudentRow.insertCell(-1); 338 td4.innerHTML = arguments[5]; 339 var td5 = tblStudentRow.insertCell(-1); 340 td5.innerHTML = GetDateFromJsonDate(arguments[6]); 341 var td6 = tblStudentRow.insertCell(-1); 342 //第二种:根据表格行获取单元格值。 343 td6.innerHTML = "<a href='javascript:Modified("stu"," + arguments[1] + ");'>修改</a> <a href='javascript:Delete(" + arguments[1] + ");'>删除</a>"; 344 }; 345 function JsonStrToTable() {//接受数据函数 346 var arr = arguments[0].split(" "); 347 //每次回来数据都更新页数 348 pageCount = parseInt(arr[1]); 349 var pIndex = parseInt(arr[2]); 350 //也可以 351 var json = JSON.parse(arr[0]); 352 //var json = eval(arguments[0]); 353 if (json != null) {//为防止删除后的出错 354 if (json != undefined) {//对eval的判断 355 if (json.length > 0) { 356 if (json[0].Name == undefined) { 357 RemoveRowToTable(tblScore); 358 //向表格里插入行 359 for (var i = 0; i < json.length ; i++) { 360 //tblScore.rows.length :自动增长的 361 InsertRowTotblSco(tblScore.rows.length - 1, json[i].Id, json[i].Math, json[i].English); 362 } 363 //如果在这里同时插入pageBar当然没问题,pageCount已经初始化了 364 //但是请求页码值无法确定。 365 Paging("pageBarSco", pIndex, "NavigateOnClick", "sco"); 366 } else { 367 //清空不需要的数据 368 RemoveRowToTable(tblStudent); 369 for (var i = 0; i < json.length; i++) { 370 //{"sId":{"Id":1,"Math":null,"English":40}, 371 // "Id":1,"Name":"张夏槐", 372 // "Age":9,"Gender":"女","CID":2, 373 // "BirthDay":"\/Date(308592000000)\/"}, 374 InsertRowTotblStu(tblStudent.rows.length - 1, json[i].Id, json[i].Name, json[i].Age, json[i].Gender, json[i].CID, json[i].BirthDay); 375 } 376 Paging("pageBarStu", pIndex, "NavigateOnClick", "stu"); 377 } 378 } 379 } 380 } 381 //// 382 //pageCount = false; 383 }; 384 function RequestPageByIndexAndName() { 385 function cm() { 386 /* 387 var xhr = GetXHR(); 388 //重复利用可以用 参数化 389 xhr.open("get", "SList.ashx?pi=" + arguments[0] + "&name=" + arguments[1], true); 390 //http://localhost:1030/List.aspx?pI=1 (Cache) 391 xhr.setRequestHeader("If-Modified-Since", "0"); 392 xhr.onreadystatechange = function () { 393 if (xhr.readyState == 4) { 394 if (xhr.status == 200) { 395 //如果是值是空 json数组是null ,而不是 ""="" 396 var cont = xhr.responseText;//{"Id":1,"Math":null,"English":40} 397 //将json 字符串传入--> 398 JsonStrToTable(cont); 399 } else { 400 alert("数据错误。"); 401 } 402 } 403 }; 404 xhr.send(null); 405 */ 406 }; //Error:说明若"Error",未找到函数。 407 Request("get", "SList.ashx?pi=" + arguments[0] + "&name=" + arguments[1], true, JsonStrToTable, Error, null); 408 //如果在这里同时插入pageBar会出现问题,pageCount还没有值。 409 ////只能用线程性接受pageCount 410 //var tid = setInterval(function () { 411 // if (pageCount != false) { 412 413 // } 414 //}, 200); 415 }; 416 //被请求页 417 function NavigateOnClick() { 418 //发送请求 419 var pi = arguments[0]; 420 if (isNaN(pi)) 421 pi = parseInt(GetObject("pGoto").value); 422 if (pi < 1) 423 pi = 1; 424 else if (pi > pageCount) 425 pi = pageCount; 426 RequestPageByIndexAndName(pi, arguments[1]); 427 }; 428 window.onload = function () { 429 tblStudent = GetObject("tblStu"); 430 tblScore = GetObject("tblSco"); 431 RequestPageByIndexAndName(1, "sco");//动态删除后分页有Bug 432 RequestPageByIndexAndName(1, "stu"); 433 ////向PageBar位置输出 434 //pageNavigatorPanel("pageBarSco"); 435 //pageNavigatorPanel("pageBarStu"); 436 }; 437 </script> 438 </head> 439 <body> 440 <div> 441 <p>学生信息列表</p> 442 <table cellspacing="0" id="tblSco" class="center" style=" 620px; margin-left: -310px;"> 443 <tr> 444 <td colspan="4" style="padding-bottom: 20px; border: none;">成绩表</td> 445 </tr> 446 <tr> 447 <td>id</td> 448 <td>Math</td> 449 <td>English</td> 450 <td>Edit</td> 451 </tr> 452 <!--<%--用另一种方式了--%> 453 <%----%> <%=sbSco==null?"":sbSco.ToString() %>--> 454 <tr> 455 <!-- <td>分页</td>--> 456 <td colspan="4"> 457 <div id="pageBarSco"></div> 458 <!-- <a title="首页" class="page" id="pFirst" href="#" style="">首页</a> 459 <a title="上一页" class="page" id="pPrevious" href="#">上一页</a> 460 <a title="" class="page pageB" id="" href="#">8</a> 461 <a title="" class="page pageB" id="A5" href="#">9</a> 462 <a title="" class="page pageB" id="A6" href="#">10</a> 463 <a title="" class="page pageB" id="A7" href="#">11</a> 464 <a title="" class="page pageB" id="A8" href="#">12</a> 465 <a title="下一页" class="page" id="pNext" href="#">下一页</a> 466 <a title="尾页" class="page" id="pTrailer" href="#">尾页</a> 467 至第<input type="text" id="pGoto" style="border:1px solid rgb(206,206,206); 31px;height:19px;margin:1px 0;text-align:center;" />页--> 468 </td> 469 <!-- <td>分页</td>--> 470 </tr> 471 </table> 472 <hr style=" 57%; color: #b200ff;" /> 473 <table cellspacing="0" id="tblStu" class="center" style=" 760px; margin: 25px 0 0 -380px;"> 474 <tr> 475 <td colspan="6" style="border: none; text-align: left; padding-left: 16px;">学生表</td> 476 <td style="border: none;"><a href="javascript:Add();">增加</a></td> 477 </tr> 478 <tr> 479 <td style="">id</td> 480 <td>Name</td> 481 <td>Age</td> 482 <td>Gender</td> 483 <td>ClassId</td> 484 <td>Birthday</td> 485 <td>Edit</td> 486 </tr> 487 <!--<%--用另一种方式了--%> 488 <%----%> <%=sbStu==null?"":sbStu.ToString() %>--> 489 <tr> 490 <td>分页</td> 491 <td colspan="5"> 492 <div id="pageBarStu"></div> 493 <!-- <a title="首页" class="page" id="A1" href="#">首页</a> 494 <a title="上一页" class="page" id="A2" href="#">上一页</a> 495 <a title="下一页" class="page" id="A3" href="#">下一页</a> 496 <a title="尾页" class="page" id="A4" href="#">尾页</a> --> 497 </td> 498 <td>分页</td> 499 </tr> 500 </table> 501 </div> 502 <hr style=" 70%; color: #b200ff; margin-top: 2%;" /> 503 <p style="font-size: medium; padding: 15px 0;">主要练习异步对象,分页</p> 504 <!-- 有了AJAX就不用提交表单了。--> 505 <!-- <form method="post" action="NonQuery.ashx">--> 506 <div id="stuAdd" class="Add" style=" 400px; height: 150px; margin-left: -200px; margin-top: -75px;"> 507 姓名:<input type="text" id="txtName" /> 508 年龄:<input type="text" id="txtAge" /> 509 性别:<input type="text" id="txtGender" /><br /> 510 班级ID:<input type="text" id="txtCID" /><br /> 511 出生日期:<input type="text" id="txtBirthday" /><br /> 512 <div class="button"> 513 <!--不能写成 submit 不然后台得不到数据--> 514 <input type="button" value="确定" onclick="OK(1);" /><input type="button" value="取消" onclick=" Cancel('stuAdd');" /> 515 </div> 516 </div> 517 <!-- </form>--> 518 <!--练习储存过程的@@identity 519 <form method="post" action="NonQuery.ashx">--> 520 <div id="scoAdd" class="Add" style=" 280px; height: 126px; margin: -63px 0 0 -140px;"> 521 id:<input type="text" id="txtId" readonly="readonly" /><br /> 522 Math:<input type="text" id="txtMath" /><br /> 523 English:<input type="text" id="txtEnglish" /> 524 <div class="button" id="Action"> 525 <!--不能写成 submit 不然后台得不到数据--> 526 <input type="button" value="确定" onclick="OK(2);" /><!--<input type="button" value="取消" onclick="Cancel();" />--> 527 </div> 528 </div> 529 <!-- </form>--> 530 </body> 531 </html>
SList.ashx
1 <%@ WebHandler Language="C#" Class="SList" %> 2 3 using System; 4 using System.Web; 5 using System.Web.Script.Serialization; 6 using System.Collections.Generic; 7 8 public class SList : IHttpHandler 9 { 10 private Web.BLL.TransferAction action = null; 11 12 private int rowCount, pageCount; 13 private int pageSize = 5, pageIndex; 14 15 public void ProcessRequest(HttpContext context) 16 { 17 context.Response.ContentType = "text/html"; 18 19 //不能判断是get,post方式下取值 20 string pIndex = context.Request.Params["pi"]; 21 string tblName = context.Request.QueryString["name"]; 22 if (pIndex != null && tblName != null) 23 { 24 pageIndex = int.Parse(pIndex); 25 JavaScriptSerializer jsSerializer = new JavaScriptSerializer(); 26 27 if (tblName == "sco")//"stu" 28 { 29 List<Web.Model.MyScore> lsSco = this.GetList<Web.Model.MyScore>(out rowCount, out pageCount, pageIndex, pageSize); 30 //序列化为Json字符串。 31 context.Response.Write(jsSerializer.Serialize(lsSco)); 32 } 33 else 34 { 35 List<Web.Model.MyStudent> lsStu = this.GetList<Web.Model.MyStudent>(out rowCount, out pageCount, pageIndex, pageSize); 36 context.Response.Write(jsSerializer.Serialize(lsStu)); 37 } 38 } 39 //看客户端能接受到pageCount? YES//别忘了缓冲区。 40 //if (pageIndex > pageCount) 41 // pageIndex = pageCount; 42 context.Response.Write(" " + pageCount + " " + pageIndex); 43 } 44 public List<T> GetList<T>(out int rowCount, out int pageCount, int pageIndex, int pageSize = 5) 45 { 46 //T a = T() ; 47 List<T> lt = new List<T>(); 48 action = new Web.BLL.TransferAction(); 49 if (lt is List<Web.Model.MyScore>) 50 { 51 return action.GetListSco(out rowCount, out pageCount, pageIndex, pageSize) as List<T>; 52 } 53 else 54 { 55 return action.GetListStu(out rowCount, out pageCount, pageIndex, pageSize) as List<T>; 56 } 57 } 58 59 }
NonQuery.ashx
1 <%@ WebHandler Language="C#" Class="NonQuery" %> 2 3 using System; 4 using System.Web; 5 6 public class NonQuery : IHttpHandler 7 { 8 private int result = -1; 9 private Web.BLL.TransferAction action = null; 10 11 public void ProcessRequest(HttpContext context) 12 { 13 context.Response.ContentType = "text/html"; 14 //临时变量 15 int tmp; DateTime dt; 16 Web.Model.ActionBehavior AB; //null;//枚举不是引用类型 17 //是否可以用到 ActionBehavior 18 //不能用传过来的是字符串,不是类型。 19 //删除(级联) 20 string id = context.Request.Form["id"]; 21 // string id = context.Request.Params["id"]; 22 // string id = context.Request.QueryString["id"]; 23 //添加(学生) 24 string name = context.Request.Form["name"]; 25 //添加(成绩) 26 string sid = context.Request.Form["sid"]; 27 28 //修改 action=modify 29 string actid = context.Request.QueryString["actionId"]; 30 AB = Web.Model.ActionBehavior.Add; 31 if (actid != null) 32 AB = Web.Model.ActionBehavior.Modify; 33 34 //用一个 action 对象可以吗?:肯定不行 35 if (id != null) 36 { 37 action = new Web.BLL.TransferAction(); 38 result = action.ExecuteNonQuery(Web.Model.ActionBehavior.Delete, new Web.Model.MyStudent() { Id = int.Parse(id) }); 39 } 40 else if (name != null) 41 { 42 string age = context.Request.Form["age"]; 43 string gender = context.Request.Form["gender"]; 44 string cid = context.Request.Form["cid"]; 45 string birthday = context.Request.Form["birthday"]; 46 47 action = new Web.BLL.TransferAction(); 48 result = action.ExecuteNonQuery<Web.Model.MyStudent>(AB, 49 new Web.Model.MyStudent() 50 { 51 52 Id = actid == null ? 0 : int.Parse(actid), 53 Name = name == "" ? null : name, 54 Age = int.TryParse(age, out tmp) == true ? (int?)tmp : null, 55 Gender = (gender == "男" || gender == "女") ? (char?)char.Parse(gender) : null, 56 CID = int.TryParse(cid, out tmp) == true ? (int?)tmp : null, 57 BirthDay = DateTime.TryParse(birthday, out dt) == true ? (DateTime?)dt : null 58 }); 59 } 60 else if (sid != null) 61 { 62 string math = context.Request.Form["math"]; 63 string english = context.Request.Form["english"]; 64 65 action = new Web.BLL.TransferAction(); 66 67 result = action.ExecuteNonQuery<Web.Model.MyScore>(AB, 68 new Web.Model.MyScore() 69 { 70 Id = int.Parse(sid), 71 Math = int.TryParse(math, out tmp) == true ? (int?)tmp : null, 72 English = int.TryParse(english, out tmp) == true ? (int?)tmp : null 73 }); 74 } 75 //结果返回 76 context.Response.Write(result); 77 } 78 79 }
DataAction.cs
1 public class DataAction 2 { 3 private List<Web.Model.MyStudent> ltStu = null; 4 private List<Web.Model.MyScore> ltSco = null; 5 public DataAction() 6 { 7 ltStu = new List<Web.Model.MyStudent>(); 8 } 9 10 public List<Web.Model.MyStudent> GetListStu(out int rowCount, out int pageCount, int pageIndex, int pageSize = 5) 11 { 12 rowCount = pageCount = -1; 13 //定义参数 14 System.Data.SqlClient.SqlParameter[] param = {new System.Data.SqlClient.SqlParameter( "@pageIndex",pageIndex), 15 new System.Data.SqlClient.SqlParameter("@pageSize",pageSize), 16 new System.Data.SqlClient.SqlParameter("@rowCount",rowCount), 17 new System.Data.SqlClient.SqlParameter("@pageCount",pageCount) }; 18 //方向 19 param[2].Direction = System.Data.ParameterDirection.Output; 20 param[3].Direction = System.Data.ParameterDirection.Output; 21 22 using (System.Data.SqlClient.SqlDataReader reader = SqlHelper.ExecuteGetPaging("pro_MyStudent", param)) 23 { 24 if (reader.HasRows) 25 { 26 Web.Model.MyStudent stu = null; 27 ltStu = new List<Model.MyStudent>(); 28 while (reader.Read()) 29 { 30 //由于储存过程 31 // select * from ( 32 // select row_number() over(order by id) as IsIdentity,* from MyStudent 33 // ) as tbl where tbl.IsIdentity between * and * 34 //增加了一列IsIdentity 35 stu = new Web.Model.MyStudent(); 36 stu.Id = int.Parse(reader[1].ToString()); 37 stu.sId = this.GetScore(stu.Id); 38 stu.Name = reader.IsDBNull(2) ? null : reader[2].ToString(); 39 stu.Age = reader.IsDBNull(3) ? null : (int?)reader.GetInt32(3); 40 stu.Gender = reader.IsDBNull(4) ? null : (char?)char.Parse(reader[4].ToString()); 41 stu.CID = reader.IsDBNull(5) ? null : (int?)int.Parse(reader[5].ToString()); 42 stu.BirthDay = reader.IsDBNull(6) ? null : (DateTime?)reader.GetDateTime(6); 43 ltStu.Add(stu); 44 } 45 46 //为什么??? 47 //结束当前游标 (指向下一个程序集。) 48 if (reader.NextResult()) 49 { 50 //while (reader.Read()) 51 //{ 52 // rowCount = int.Parse(param[2].Value.ToString()); 53 // pageCount = Convert.ToInt32(param[3].Value); 54 //} 55 } 56 // object a=reader[0]; 57 rowCount = int.Parse(param[2].Value.ToString()); 58 pageCount = Convert.ToInt32(param[3].Value); 59 } 60 return ltStu; 61 } 62 } 63 64 public List<Web.Model.MyScore> GetListSco(out int rowCount, out int pageCount, int pageIndex, int pageSize = 5) 65 { 66 rowCount = pageCount = -1; 67 using (System.Data.DataTable dt = SqlHelper.ExecuteGetPaging("pro_MyScore", out rowCount, out pageCount, pageIndex, pageSize)) 68 { 69 if (dt.Rows.Count > 0) 70 { 71 ltSco = new List<Model.MyScore>(); 72 foreach (System.Data.DataRow item in dt.Rows) 73 { 74 Web.Model.MyScore score = new Model.MyScore(); 75 score.Id = int.Parse(item[0].ToString()); 76 score.Math = item.IsNull(1) ? null : (int?)int.Parse(item[1].ToString()); 77 score.English = item.IsNull(2) ? null : (int?)int.Parse(item[2].ToString()); 78 ltSco.Add(score); 79 } 80 } 81 return ltSco; 82 } 83 } 84 85 public Web.Model.MyScore GetScore(int id) 86 { 87 Web.Model.MyScore score = null; 88 string sql = "select * from MyScore where id=@id"; 89 System.Data.SqlClient.SqlParameter[] param = 90 { 91 new System.Data.SqlClient.SqlParameter("@id",id), 92 }; 93 94 using (System.Data.DataTable dt = SqlHelper.ExecuteDataTable(sql, param)) 95 { 96 if (dt.Rows.Count > 0) 97 { 98 score = new Web.Model.MyScore(); 99 System.Data.DataRow row = dt.Rows[0]; 100 score.Id = int.Parse(row[0].ToString()); 101 score.Math = row.IsNull(1) ? null : (int?)int.Parse(row[1].ToString()); 102 score.English = row.IsNull(2) ? null : (int?)int.Parse(row[2].ToString()); 103 } return score; 104 } 105 } 106 public Web.Model.MyStudent GetStudent(int id) 107 { 108 Web.Model.MyStudent student = null; 109 string sql = "select * from MyStudent where id=@id"; 110 System.Data.SqlClient.SqlParameter[] param = 111 { 112 new System.Data.SqlClient.SqlParameter("@id",id), 113 }; 114 using (System.Data.SqlClient.SqlDataReader reader = SqlHelper.ExecuteReader(sql, param)) 115 { 116 if (reader.HasRows) 117 { 118 student = new Web.Model.MyStudent(); 119 while (reader.Read()) 120 { 121 student.Id = reader.GetInt32(0); 122 student.sId = this.GetScore(student.Id); 123 student.Name = reader.IsDBNull(1) ? null : reader.GetString(1); 124 student.Age = reader.IsDBNull(2) ? null : (int?)reader.GetInt32(2); 125 student.Gender = reader.IsDBNull(3) ? null : (char?)Convert.ToChar(reader[3]); 126 student.CID = reader.IsDBNull(4) ? null : (int?)int.Parse(reader[4].ToString()); 127 student.BirthDay = reader.IsDBNull(5) ? null : (DateTime?)DateTime.Parse(reader[5].ToString()); 128 } 129 } 130 return student; 131 } 132 } 133 134 public int ExecuteNonQuery<T>(Web.Model.ActionBehavior behavior, T S) 135 { 136 string sql = string.Empty; 137 System.Data.SqlClient.SqlParameter[] param = null; 138 if (S is Web.Model.MyStudent) 139 { 140 Web.Model.MyStudent stu = S as Web.Model.MyStudent; 141 switch (behavior) 142 { 143 case Web.Model.ActionBehavior.Add: 144 // int tmp = -1; 145 //sql = "insert into MyStudent values(@n,@a,@g,@ci,@b)"; 146 sql = "pro_GetIdentityFromMyStu"; 147 //切记: 参数名要和字段名(储存过程)一致和参数要加@ 148 param = new System.Data.SqlClient.SqlParameter[]{ 149 new System.Data.SqlClient.SqlParameter("@name",stu.Name==null?DBNull.Value:(object)stu.Name), 150 new System.Data.SqlClient.SqlParameter("@age",stu.Age==null?DBNull.Value:(object)stu.Age), 151 new System.Data.SqlClient.SqlParameter("@gender",stu.Gender==null?DBNull.Value:(object)stu.Gender), 152 new System.Data.SqlClient.SqlParameter("@classId",stu.CID==null?DBNull.Value:(object)stu.CID), 153 new System.Data.SqlClient.SqlParameter("@birthday",stu.BirthDay==null?DBNull.Value:(object)stu.BirthDay) 154 // new System.Data.SqlClient.SqlParameter("@identity",tmp) 155 }; 156 //但是可以带出参数的准确值 157 // param[5].Direction = System.Data.ParameterDirection.Output; 158 // select @identity=@@IDENTITY 这个储存过程没有产生结果集 159 //System.Data.DataTable a = SqlHelper.ExecuteDataTable(sql, true, param); 160 //Convert.ToInt32(param[5].Value); 161 //修改为 select @@IDENTITY 得到程序集 162 return Convert.ToInt32(SqlHelper.ExecuteDataTable(sql, true, param).Rows[0][0]); 163 case Web.Model.ActionBehavior.Modify: 164 sql = "update MyStudent set Name=@n,Age=@a,Gender=@g,ClassId=@ci,Birthday=@b where id=@id"; 165 param = new System.Data.SqlClient.SqlParameter[]{ 166 new System.Data.SqlClient.SqlParameter("@id",stu.Id), 167 new System.Data.SqlClient.SqlParameter("@n",stu.Name==null?DBNull.Value:(object)stu.Name), 168 new System.Data.SqlClient.SqlParameter("@a",stu.Age==null?DBNull.Value:(object)stu.Age), 169 new System.Data.SqlClient.SqlParameter("@g",stu.Gender==null?DBNull.Value:(object)stu.Gender), 170 new System.Data.SqlClient.SqlParameter("@ci",stu.CID==null?DBNull.Value:(object)stu.CID), 171 new System.Data.SqlClient.SqlParameter("@b",stu.BirthDay==null?DBNull.Value:(object)stu.BirthDay) 172 }; 173 break; 174 case Web.Model.ActionBehavior.Delete: 175 sql = "delete from MyStudent where id=@id";//设置的是级联删除 176 param = new System.Data.SqlClient.SqlParameter[] { new System.Data.SqlClient.SqlParameter("@id", stu.Id) }; 177 break; 178 } 179 } 180 else 181 { 182 Web.Model.MyScore score = S as Web.Model.MyScore; 183 switch (behavior) 184 { 185 case Web.Model.ActionBehavior.Modify: 186 sql = "update MyScore set Math=@m,English=@e where id=@id"; 187 param = new System.Data.SqlClient.SqlParameter[] { 188 new System.Data.SqlClient.SqlParameter("@id",score.Id), 189 new System.Data.SqlClient.SqlParameter("@m",score.Math==null?DBNull.Value:(object)score.Math), 190 new System.Data.SqlClient.SqlParameter("@e",score.English==null?DBNull.Value:(object)score.English)}; 191 break; 192 case Web.Model.ActionBehavior.Add: 193 sql = "insert into MyScore values(@id,@m,@e)"; 194 param = new System.Data.SqlClient.SqlParameter[] { 195 new System.Data.SqlClient.SqlParameter("@id",score.Id), 196 new System.Data.SqlClient.SqlParameter("@m",score.Math==null?DBNull.Value:(object)score.Math), 197 new System.Data.SqlClient.SqlParameter("@e",score.English==null?DBNull.Value:(object)score.English)}; 198 break; 199 /* case Web.Model.ActionBehavior.Delete: 200 sql = "delete from MyScore where id";*/ 201 } 202 } 203 return SqlHelper.ExecuteNonQuery(sql, param); 204 } 205 }
SqlHelper.cs
1 public static class SqlHelper 2 { 3 private readonly static string connstr = ConfigurationManager.ConnectionStrings["sql"].ConnectionString; 4 5 #region 这两个方法可以和起来 6 7 public static System.Data.SqlClient.SqlDataReader ExecuteReader(string sql, params System.Data.SqlClient.SqlParameter[] param) 8 { 9 System.Data.SqlClient.SqlConnection con = new System.Data.SqlClient.SqlConnection(connstr); 10 11 using (System.Data.SqlClient.SqlCommand cmd = new System.Data.SqlClient.SqlCommand(sql, con)) 12 { 13 if (param != null) 14 { 15 cmd.Parameters.AddRange(param); 16 } 17 con.Open(); 18 return cmd.ExecuteReader(System.Data.CommandBehavior.CloseConnection); 19 } 20 } 21 //public static System.Data.SqlClient.SqlDataReader ExecuteGetPaging(out int rowCount, out int pageCount, string proName, int pageIndex, int pageSize = 5) 22 //{ 23 public static System.Data.SqlClient.SqlDataReader ExecuteGetPaging(string proName, params System.Data.SqlClient.SqlParameter[] param) 24 { 25 //System.Data.SqlClient.SqlDataReader reader = null; 26 //rowCount = pageCount = -1; 27 System.Data.SqlClient.SqlConnection con = new System.Data.SqlClient.SqlConnection(connstr); 28 29 using (System.Data.SqlClient.SqlCommand cmd = new System.Data.SqlClient.SqlCommand(proName, con)) 30 { 31 cmd.CommandType = System.Data.CommandType.StoredProcedure; 32 //System.Data.SqlClient.SqlParameter[] param = {new System.Data.SqlClient.SqlParameter( "@pageIndex",pageIndex), 33 // new System.Data.SqlClient.SqlParameter("@pageSize",pageSize), 34 // new System.Data.SqlClient.SqlParameter("@rowCount",rowCount), 35 // new System.Data.SqlClient.SqlParameter("@pageCount",pageCount) }; 36 //param[2].Direction = System.Data.ParameterDirection.Output; 37 //param[3].Direction = System.Data.ParameterDirection.Output; 38 if (param != null) 39 { 40 cmd.Parameters.AddRange(param); 41 } 42 con.Open(); 43 //reader = cmd.ExecuteReader(System.Data.CommandBehavior.CloseConnection); 44 //return reader; 45 return cmd.ExecuteReader(System.Data.CommandBehavior.CloseConnection); 46 } 47 } 48 #endregion 49 #region 和起来的ExecuteReader 50 51 public static System.Data.SqlClient.SqlDataReader ExecuteReader(string sql, bool isProc, params System.Data.SqlClient.SqlParameter[] param) 52 { 53 System.Data.SqlClient.SqlConnection con = new System.Data.SqlClient.SqlConnection(connstr); 54 using (System.Data.SqlClient.SqlCommand cmd = new System.Data.SqlClient.SqlCommand(sql, con)) 55 { 56 if (isProc) 57 cmd.CommandType = System.Data.CommandType.StoredProcedure; 58 if (param != null) 59 cmd.Parameters.AddRange(param); 60 con.Open(); 61 return cmd.ExecuteReader(System.Data.CommandBehavior.CloseConnection); 62 } 63 } 64 #endregion 65 66 public static System.Data.DataTable ExecuteDataTable(string sql, params System.Data.SqlClient.SqlParameter[] param) 67 { 68 System.Data.DataTable dt = new System.Data.DataTable(); 69 using (System.Data.SqlClient.SqlDataAdapter adapter = new System.Data.SqlClient.SqlDataAdapter(sql, connstr)) 70 { 71 if (param != null) 72 { 73 adapter.SelectCommand.Parameters.AddRange(param); 74 } 75 adapter.Fill(dt); 76 return dt; 77 } 78 } 79 80 public static System.Data.DataTable ExecuteGetPaging(string proName, out int rowCount, out int pageCount, int pageIndex, int pageSize = 5) 81 { 82 //out特性 83 rowCount = pageCount = -1; 84 System.Data.DataTable dt = new System.Data.DataTable(); 85 using (System.Data.SqlClient.SqlDataAdapter adapter = new System.Data.SqlClient.SqlDataAdapter(proName, connstr)) 86 { 87 //查询命令类型 88 adapter.SelectCommand.CommandType = System.Data.CommandType.StoredProcedure; 89 //参数放在外面是否更合适呢? 90 System.Data.SqlClient.SqlParameter[] param = 91 { 92 new System.Data.SqlClient.SqlParameter("@pageIndex",pageIndex), 93 new System.Data.SqlClient.SqlParameter("@pageSize",pageSize), 94 new System.Data.SqlClient.SqlParameter("@rowCount",rowCount), 95 new System.Data.SqlClient.SqlParameter("@pageCount",pageCount) 96 }; 97 adapter.SelectCommand.Parameters.AddRange(param); 98 //参数方向 99 param[2].Direction = System.Data.ParameterDirection.Output; 100 param[3].Direction = System.Data.ParameterDirection.Output; 101 adapter.Fill(dt); 102 //为确保转换成功不能使用强制类型转换---参数赋值 103 // rowCount = param[2].Value; 104 rowCount = Convert.ToInt32(param[2].Value); 105 pageCount = int.Parse(param[3].Value.ToString()); 106 107 return dt; 108 } 109 } 110 111 public static System.Data.DataTable ExecuteDataTable(string sql, bool isProc, params System.Data.SqlClient.SqlParameter[] param) 112 { 113 System.Data.DataTable dt = new System.Data.DataTable(); 114 using (System.Data.SqlClient.SqlDataAdapter adapter = new System.Data.SqlClient.SqlDataAdapter(sql, connstr)) 115 { 116 if (isProc)//执行的是插入的储存过程,给SelectCommand赋值可以吗? :可以 117 adapter.SelectCommand.CommandType = System.Data.CommandType.StoredProcedure; 118 if (param != null) 119 adapter.SelectCommand.Parameters.AddRange(param); 120 adapter.Fill(dt); 121 return dt; 122 } 123 } 124 125 public static int ExecuteNonQuery(string sql, params System.Data.SqlClient.SqlParameter[] param) 126 { 127 using (System.Data.SqlClient.SqlConnection con = new System.Data.SqlClient.SqlConnection(connstr)) 128 { 129 using (System.Data.SqlClient.SqlCommand cmd = new System.Data.SqlClient.SqlCommand(sql, con)) 130 { 131 if (param != null) 132 cmd.Parameters.AddRange(param); 133 con.Open(); 134 //若级联插入出错不会返回-1,没有报错 会返回状态码 500=服务器内部错误,前台处理一下 135 int a=cmd.ExecuteNonQuery(); 136 return a; 137 } 138 } 139 } 140 }
ActionBehavior.cs
1 public enum ActionBehavior 2 { 3 Add,Modify,Delete 4 }