Ajax实现将可以编辑的表格与数据库交互

 

Ajax实现将可以编辑的表格与数据库交互

  2568人阅读  评论(15)  收藏  举报

       上篇博客通过JQuery实现单击表格进行编辑的功能,本篇博客将继续延伸,将在此功能的基础之上,与数据库交互,实现真正的可编辑。

       

        传统的网页,如果需要更新数据,需要更新整个页面,而Ajax可以通过在后台与服务器进行少量数据交换,使网页实现异步更新,是一种在无需加载整个网页的情况下, 能够更新部分网页的技术。

        本篇博客将上传我在项目用到的可以编辑的表格的源代码。继续丰富了上篇博客中的编辑效果,又与数据库进行交互,实现真正的可编辑。

        Html页面的代码:

[html]  view plain copy print ?
  1. <div class="span9">  
  2.        <%-- 显示提示信息--%>  
  3.         <asp:Label ID="Label1" runat="server" Text="说明 :单击模块名称进行修改,回车或单击其它地方确定修改,ESC取消编辑。" ForeColor="Red"></asp:Label>  
  4.      <%--   局部更新--%>  
  5.         <asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>  
  6.         <asp:UpdatePanel ID="UpdatePanel1" runat="server">  
  7.             <ContentTemplate>  
  8.                 <%-- 表格 --%>  
  9.                 <table class="table table-striped">  
  10.                     <tr>  
  11.                         <th>模块ID</th>  
  12.                         <th>模块名称</th>  
  13.                         <th>删除</th>  
  14.                     </tr>  
  15.                     <%--绑定到Repeater--%>  
  16.                     <asp:Repeater ID="rptModel" runat="server">  
  17.                         <ItemTemplate>  
  18.                             <tr>  
  19.                                 <td><%#Eval("mdlID")%></td>  
  20.                                 <td class="modelname"><%#Eval("mdlName")%></td>  
  21.                                 <td>  
  22.                                     <asp:LinkButton ID="lbtnDelete" runat="server" OnClick="lbtnDelete_Click" OnClientClick="return confirm('是否要真的删除?')" CommandArgument='<%#Eval("mdlID") %>'>删除</asp:LinkButton>  
  23.                                 </td>  
  24.                             </tr>  
  25.                         </ItemTemplate>  
  26.                     </asp:Repeater>  
  27.                 </table>  
  28.             </ContentTemplate>  
  29.         </asp:UpdatePanel>  
  30.         <%--显示错误信息--%>  
  31.         <div id="test"></div>  
  32.         <%--添加模块名称--%>  
  33.         <p>  
  34.             <asp:Label ID="Label2" runat="server" Text="模块名称"></asp:Label>  
  35.             <asp:TextBox ID="txtModelName" runat="server"></asp:TextBox>  
  36.             <asp:Button ID="btnAddModel" UseSubmitBehavior="false" runat="server" Text="添加" CssClass="btn btn-info" OnClick="btnAddModel_Click" />  
  37.         </p>  
  38.     </div>  


绑定信息代码:

[csharp]  view plain copy print ?
  1. protected void Page_Load(object sender, EventArgs e)  
  2.         {  
  3.             if (!Page.IsPostBack)  
  4.             {  
  5.                 //绑定模块信息  
  6.                 ModelInfoMgr modelInfoMgr = new ModelInfoMgr();  
  7.                 DataTable dt = new DataTable();  
  8.                 //查询所有的模块信息  
  9.                 dt = modelInfoMgr.SelectAll();  
  10.                 //绑定  
  11.                 rptModel.DataSource = dt;  
  12.                 rptModel.DataBind();  
  13.   
  14.             }  
  15.         }  


重头戏来了,JS代码

[javascript]  view plain copy print ?
  1. $(function () {  
  2.     $(".modelname").click(function () {//给页面中的modelname的标签加上click事件  
  3.         var objTD = $(this);  
  4.         //alert("heheh");  
  5.         //点击后,内容变成文本框  
  6.         var oldText = $(this).text();  //保存原来的文本  
  7.         var input =$( "<input type='text'  value='" + oldText + "'/>");//文本框的html代码  
  8.         objTD.html(input);  //td变为文本  
  9.         //设置文本框的点击事件失效  
  10.         input.click(function () {  
  11.             return false;  
  12.         });  
  13.         //设置文本框的样式  
  14.         input.css("border-width", 0);  //边框为0  
  15.         input.css("margin", 0);  
  16.         input.css("padding", 0);  
  17.         input.css("color","black");  
  18.         //input.height(objTD.height);//文本框的高度为当前td的高度  
  19.         //input.width(objTD.width);  
  20.         input.trigger("focus").trigger("select");//全选  
  21.         //文本框失去焦点的时候变为文本  
  22.         input.blur(function () {  
  23.             var newText = $(this).val();  
  24.             var input_blur = $(this);  
  25.             //objTD.html(newText);  
  26.             //当原来的名称与修改后的名称不同时才进行数据库提交操作  
  27.             if (oldText != newText) {  
  28.   
  29.                 //获取该模块名称对应的ID  
  30.                 var modelID = $.trim(objTD.prev().text());  
  31.                 // AJAX异步更改数据库  
  32.                 var url = "../handler/changeModelName.ashx?modelname=" + encodeURI(encodeURI(newText)) + "&modelID=" + modelID + "&t=" + new Date();  
  33.                 $.get(url, function (data) {  
  34.                     if (data == "false") {  
  35.                         $("#test").text("模块名称修改失败,请检查是否重复");  
  36.                         input_blur.trigger("focus").trigger("select");  //文本框全选  
  37.                     }  
  38.                     else {  
  39.                         $("#test").text("");  
  40.                         objTD.html(newText);  
  41.                     }  
  42.                 });  
  43.             }  
  44.             else {  
  45.                 //前后文本一样,将文本宽变成标签  
  46.                 objTD.html(newText);  
  47.             }  
  48.         });  
  49.         //在文本框中按下键盘某建  
  50.         input.keydown(function () {  
  51.             var jianzhi = event.keyCode;  
  52.             var input_keydown = $(this);  
  53.             switch (jianzhi) {  
  54.                 case 13:   //按下回车,保存修改  
  55.                     var newText = input_keydown.val();//修改后的名称  
  56.                     //当原来的名称与修改后的名称不同时才进行数据库提交操作  
  57.                     if (oldText != newText) {  
  58.                         //获取该模块名称对应的ID  
  59.                         var modelID = $.trim(objTD.prev().text());  
  60.                         // AJAX异步更改数据库  
  61.                         var url = "../handler/changeModelName.ashx?modelname=" + encodeURI(encodeURI(newText)) + "&modelID=" + modelID + "&t=" + new Date();  
  62.                         $.get(url, function (data) {  
  63.                             if (data == "false") {  
  64.                                 $("#test").text("模块名称修改失败,请检查是否重复");  
  65.                                 input_keydown.trigger("focus").trigger("select");  //文本框全选  
  66.                             }  
  67.                             else {  
  68.                                 $("#test").text("");  
  69.                                 objTD.html(newText);  
  70.                                 
  71.                             }  
  72.                         });  
  73.                     }  
  74.                     else {  
  75.                         //前后文本一样,将文本宽变成标签  
  76.                         objTD.html(newText);  
  77.                     }  
  78.                     break;  
  79.                 case 27:    //按下Esc,取消修改,吧文本框变成文本  
  80.                     $("#test").text("");  
  81.                     objTD.html(oldText);  
  82.                     break;  
  83.             }  
  84.         });  
  85.     });  
  86.      
  87. });  
  88. //屏蔽Enter按键  
  89. $(document).keydown(function (event) {  
  90.     switch (event.keyCode) {  
  91.         case 13: return false;  
  92.     }  
  93. });  

 

handler文件:


 

[csharp]  view plain copy print ?
  1. public void ProcessRequest(HttpContext context)  
  2.        {  
  3.            context.Response.ContentType = "text/plain";  
  4.            string modelid= context.Request.QueryString["modelID"];  
  5.            string modelname=context.Server.UrlDecode(context.Request.QueryString["modelname"]);  
  6.            //更改模块名称  
  7.            ModelInfoMgr modelInfoMgr = new ModelInfoMgr();  
  8.            ModelInfo modelInfo = new ModelInfo();  
  9.            modelInfo.ID = modelid;  
  10.            modelInfo.Name = modelname;  
  11.            //判断是否已经存在  
  12.            if (modelInfoMgr .Exists(modelInfo))  
  13.            {  
  14.                context.Response.Write("false");  
  15.                return;  
  16.            }  
  17.          bool flag=  modelInfoMgr.Update(modelInfo);  
  18.          if (flag)  
  19.          {  
  20.              context.Response.Write("true");  
  21.          }  
  22.          else  
  23.          {  
  24.              context.Response.Write("false");  
  25.          }  
  26.        }  


 

     效果图:

如图中的提示,上面的代码做单击 模块名称就可以进行修改,且回车或者单击其他地方确定修改,按ESC取消编辑。

这是在牛腩老师的方法,希望在以后的学习中,可以领会此方法之外,能够更新知识和做法,也希望得到大牛的指导和点拨,再次感谢了。     


  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值