Ajax实现将可以编辑的表格与数据库交互
2012-12-28 17:16
225 查看
上篇博客通过JQuery实现单击表格进行编辑的功能,本篇博客将继续延伸,将在此功能的基础之上,与数据库交互,实现真正的可编辑。
传统的网页,如果需要更新数据,需要更新整个页面,而Ajax可以通过在后台与服务器进行少量数据交换,使网页实现异步更新,是一种在无需加载整个网页的情况下, 能够更新部分网页的技术。
本篇博客将上传我在项目用到的可以编辑的表格的源代码。继续丰富了上篇博客中的编辑效果,又与数据库进行交互,实现真正的可编辑。
Html页面的代码:
绑定信息代码:
重头戏来了,JS代码
handler文件:
效果图:
如图中的提示,上面的代码做单击 模块名称就可以进行修改,且回车或者单击其他地方确定修改,按ESC取消编辑。
这是在牛腩老师的方法,希望在以后的学习中,可以领会此方法之外,能够更新知识和做法,也希望得到大牛的指导和点拨,再次感谢了。
传统的网页,如果需要更新数据,需要更新整个页面,而Ajax可以通过在后台与服务器进行少量数据交换,使网页实现异步更新,是一种在无需加载整个网页的情况下, 能够更新部分网页的技术。
本篇博客将上传我在项目用到的可以编辑的表格的源代码。继续丰富了上篇博客中的编辑效果,又与数据库进行交互,实现真正的可编辑。
Html页面的代码:
<div class="span9"> <%-- 显示提示信息--%> <asp:Label ID="Label1" runat="server" Text="说明 :单击模块名称进行修改,回车或单击其它地方确定修改,ESC取消编辑。" ForeColor="Red"></asp:Label> <%-- 局部更新--%> <asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager> <asp:UpdatePanel ID="UpdatePanel1" runat="server"> <ContentTemplate> <%-- 表格 --%> <table class="table table-striped"> <tr> <th>模块ID</th> <th>模块名称</th> <th>删除</th> </tr> <%--绑定到Repeater--%> <asp:Repeater ID="rptModel" runat="server"> <ItemTemplate> <tr> <td><%#Eval("mdlID")%></td> <td class="modelname"><%#Eval("mdlName")%></td> <td> <asp:LinkButton ID="lbtnDelete" runat="server" OnClick="lbtnDelete_Click" OnClientClick="return confirm('是否要真的删除?')" CommandArgument='<%#Eval("mdlID") %>'>删除</asp:LinkButton> </td> </tr> </ItemTemplate> </asp:Repeater> </table> </ContentTemplate> </asp:UpdatePanel> <%--显示错误信息--%> <div id="test"></div> <%--添加模块名称--%> <p> <asp:Label ID="Label2" runat="server" Text="模块名称"></asp:Label> <asp:TextBox ID="txtModelName" runat="server"></asp:TextBox> <asp:Button ID="btnAddModel" UseSubmitBehavior="false" runat="server" Text="添加" CssClass="btn btn-info" OnClick="btnAddModel_Click" /> </p> </div>
绑定信息代码:
protected void Page_Load(object sender, EventArgs e) { if (!Page.IsPostBack) { //绑定模块信息 ModelInfoMgr modelInfoMgr = new ModelInfoMgr(); DataTable dt = new DataTable(); //查询所有的模块信息 dt = modelInfoMgr.SelectAll(); //绑定 rptModel.DataSource = dt; rptModel.DataBind(); } }
重头戏来了,JS代码
$(function () { $(".modelname").click(function () {//给页面中的modelname的标签加上click事件 var objTD = $(this); //alert("heheh"); //点击后,内容变成文本框 var oldText = $(this).text(); //保存原来的文本 var input =$( "<input type='text' value='" + oldText + "'/>");//文本框的html代码 objTD.html(input); //td变为文本 //设置文本框的点击事件失效 input.click(function () { return false; }); //设置文本框的样式 input.css("border-width", 0); //边框为0 input.css("margin", 0); input.css("padding", 0); input.css("color","black"); //input.height(objTD.height);//文本框的高度为当前td的高度 //input.width(objTD.width); input.trigger("focus").trigger("select");//全选 //文本框失去焦点的时候变为文本 input.blur(function () { var newText = $(this).val(); var input_blur = $(this); //objTD.html(newText); //当原来的名称与修改后的名称不同时才进行数据库提交操作 if (oldText != newText) { //获取该模块名称对应的ID var modelID = $.trim(objTD.prev().text()); // AJAX异步更改数据库 var url = "../handler/changeModelName.ashx?modelname=" + encodeURI(encodeURI(newText)) + "&modelID=" + modelID + "&t=" + new Date(); $.get(url, function (data) { if (data == "false") { $("#test").text("模块名称修改失败,请检查是否重复"); input_blur.trigger("focus").trigger("select"); //文本框全选 } else { $("#test").text(""); objTD.html(newText); } }); } else { //前后文本一样,将文本宽变成标签 objTD.html(newText); } }); //在文本框中按下键盘某建 input.keydown(function () { var jianzhi = event.keyCode; var input_keydown = $(this); switch (jianzhi) { case 13: //按下回车,保存修改 var newText = input_keydown.val();//修改后的名称 //当原来的名称与修改后的名称不同时才进行数据库提交操作 if (oldText != newText) { //获取该模块名称对应的ID var modelID = $.trim(objTD.prev().text()); // AJAX异步更改数据库 var url = "../handler/changeModelName.ashx?modelname=" + encodeURI(encodeURI(newText)) + "&modelID=" + modelID + "&t=" + new Date(); $.get(url, function (data) { if (data == "false") { $("#test").text("模块名称修改失败,请检查是否重复"); input_keydown.trigger("focus").trigger("select"); //文本框全选 } else { $("#test").text(""); objTD.html(newText); } }); } else { //前后文本一样,将文本宽变成标签 objTD.html(newText); } break; case 27: //按下Esc,取消修改,吧文本框变成文本 $("#test").text(""); objTD.html(oldText); break; } }); }); }); //屏蔽Enter按键 $(document).keydown(function (event) { switch (event.keyCode) { case 13: return false; } });
handler文件:
public void ProcessRequest(HttpContext context) { context.Response.ContentType = "text/plain"; string modelid= context.Request.QueryString["modelID"]; string modelname=context.Server.UrlDecode(context.Request.QueryString["modelname"]); //更改模块名称 ModelInfoMgr modelInfoMgr = new ModelInfoMgr(); ModelInfo modelInfo = new ModelInfo(); modelInfo.ID = modelid; modelInfo.Name = modelname; //判断是否已经存在 if (modelInfoMgr .Exists(modelInfo)) { context.Response.Write("false"); return; } bool flag= modelInfoMgr.Update(modelInfo); if (flag) { context.Response.Write("true"); } else { context.Response.Write("false"); } }
效果图:
如图中的提示,上面的代码做单击 模块名称就可以进行修改,且回车或者单击其他地方确定修改,按ESC取消编辑。
这是在牛腩老师的方法,希望在以后的学习中,可以领会此方法之外,能够更新知识和做法,也希望得到大牛的指导和点拨,再次感谢了。
相关文章推荐
- Ajax实现将可以编辑的表格与数据库交互
- JQuery结合Ajax实现双击Table表格,使Table变成可编辑,并保存到数据库中
- Ajax实现可编辑的表格(实例)
- Ajax实现xml文件数据插入数据库(二)--- ajax实现与jsp的数据交互。
- 小猫统计现在可以实现用表格编辑从表时,用下拉列表(即lookup字段)
- 使用Jquery实现可编辑的表格 并使用AJAX提交到服务器修改数据
- jQuery实现可以编辑的表格实例详解【附demo源码下载】
- 实现可编辑单元格(使用Ajax完成后台交互)。
- 用Jquery实现可编辑表格并用AJAX提交到服务器修改数据
- 使用Jquery实现可编辑的表格 并使用AJAX提交到服务器修改数据
- jQuery实现可以编辑的表格实例详解
- JQuery实现可以编辑的表格
- 用jquery实现可以编辑表格
- 微信小程序实现一个可以编辑单元格的表格
- Ajax实现xml文件数据插入数据库(二)--- ajax实现与jsp的数据交互
- PHP Ajax实现表格实时编辑
- 登山-C#-DataGridView在不使用数据库时,实现增加删除操作,在Row上右击可以编辑或删除
- 用Jquery实现可编辑表格并用AJAX提交到服务器修改数据