这是第四步点击保存将信息存入数据库中。

这个就简单了利用ajax将JSON字符串传到后台然后这里有个知识点就是将DataTable直接存入数据库中。代码如下:

一、界面获取数据JS代码:

  1. //保存订单信息
  2. function SaveToJson() {
  3. //单位
  4. var Company = document.getElementById("lblCompany").innerHTML;
  5. //NO
  6. var OrderNo = document.getElementById("lblNO").innerHTML;
  7. //下单类型
  8. var XDLX = document.getElementById("ddXDLX").value;
  9. //转库凭证号
  10. var ZKPZH = document.getElementById("txtZKPZH").value;
  11. //日期
  12. var OrderDate = document.getElementById("lblDate").innerHTML;
  13. //代理商ID
  14. var intDLSID = document.getElementById("hidDLSID").value;
  15. strReturned = returned.toString()
  16.  
  17. $.post("../DDGL/handler/SaveZCXDInfo.ashx", { strReturned: strReturned, Company: Company, OrderNo: OrderNo, XDLX: XDLX, ZKPZH: ZKPZH, OrderDate: OrderDate, intDLSID: intDLSID }, function(data) {
  18. if (data == "True") {
  19. alert("添加成功!")
  20. } else {
  21. alert("添加失败!")
  22. }
  23. window.location.href = "QueryDJLJList.aspx";
  24. });
  25.  
  26. }

二、SaveZCXDInfo.ashx代码。

这个代码中我将JSON字符串转化成对象,在将对象转化成和数据库表结构一致的DataTable。代码如下:

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Web;
  5. using Newtonsoft.Json.Linq;
  6. using Newtonsoft.Json;
  7. using Model;
  8. using BLL;
  9. using System.Data;
  10.  
  11. namespace WEB.DDGL.handler
  12. {
  13.  
  14. public class QueryTotalMoney : IHttpHandler
  15. {
  16.  
  17. public void ProcessRequest(HttpContext context)
  18. {
  19. context.Response.ContentType = "text/plain";
  20. //获取主表信息
  21. int intDLSID = Convert.ToInt32(context.Request.Form["intDLSID"].ToString().Trim());
  22. string strLJInfo = context.Request.Form["strReturned"].ToString();
  23. string strCompany = context.Request.Form["Company"].ToString();
  24. string strOrderNo = context.Request.Form["OrderNo"].ToString();
  25. string strXDLX = context.Request.Form["XDLX"].ToString();
  26. string strZKPZH = context.Request.Form["ZKPZH"].ToString();
  27. string strOrderDate = context.Request.Form["OrderDate"].ToString();
  28. //主表插入信息
  29. MT_DLS_Order Order = new MT_DLS_Order();
  30. Order.beginDate = strOrderDate;
  31. Order.Company = strCompany;
  32. Order.DLSID = intDLSID.ToString();
  33. Order.XDLX = strXDLX;
  34. Order.ZKPZH = strZKPZH;
  35. Order.OrderCode = strOrderNo;
  36. Order.SFQBFH = "否";
  37. Order.IsCancel = "否";
  38. Order.SFJRFee = "否";
  39. //获取从表信息
  40. /*
  41. * 1、新建一个DataTable
  42. * 2、把传来的Json字符串改成数组
  43. * 3、把数组变成对象
  44. * 4、把对象的值赋给DataTable
  45. * */
  46. //新建一个DataTable
  47. DataTable dtLJInfo = new DataTable("T_DLS_Order_Cong");
  48. dtLJInfo.TableName = "T_DLS_Order_Cong";
  49. //添加DataTable数据项
  50. dtLJInfo.Columns.Add(new DataColumn("ID", typeof(int)));
  51. dtLJInfo.Columns.Add(new DataColumn("name", typeof(string)));
  52. dtLJInfo.Columns.Add(new DataColumn("beginDate", typeof(string)));
  53. dtLJInfo.Columns.Add(new DataColumn("OrderID", typeof(int)));
  54. dtLJInfo.Columns.Add(new DataColumn("LJID", typeof(int)));
  55. dtLJInfo.Columns.Add(new DataColumn("LJBM", typeof(string)));
  56. dtLJInfo.Columns.Add(new DataColumn("LJMC", typeof(string)));
  57. dtLJInfo.Columns.Add(new DataColumn("Numbers", typeof(int)));
  58. dtLJInfo.Columns.Add(new DataColumn("Money", typeof(decimal)));
  59. dtLJInfo.Columns.Add(new DataColumn("DJNo", typeof(string)));
  60. dtLJInfo.Columns.Add(new DataColumn("SFFH", typeof(string)));
  61. dtLJInfo.Columns.Add(new DataColumn("FHRNo", typeof(string)));
  62. dtLJInfo.Columns.Add(new DataColumn("FHRName", typeof(string)));
  63. dtLJInfo.Columns.Add(new DataColumn("FHDate", typeof(string)));
  64. dtLJInfo.Columns.Add(new DataColumn("IsCancel", typeof(string)));
  65. //把Json字符串改成数组
  66. JArray jaLJInfo = (JArray)JsonConvert.DeserializeObject(strLJInfo);
  67. if (strXDLX == "正常下单")
  68. {
  69. for (int i = 0; i < jaLJInfo.Count; i++)
  70. {
  71. JObject obj = (JObject)jaLJInfo[i];
  72. DataRow drLJInfo = dtLJInfo.NewRow();
  73. string strLJID = obj["LJID"].ToString().Trim();
  74. string strNumbers = obj["SL"].ToString();
  75. string strMoney = obj["Money"].ToString();
  76. string strLJBM = obj["LJBM"].ToString();
  77. string strLJMC = obj["LJMC"].ToString();
  78. strLJID = strLJID.Replace("\"", "");
  79. strNumbers = strNumbers.Replace("\"", "");
  80. strMoney = strMoney.Replace("\"", "");
  81. strLJBM = strLJBM.Replace("\"", "");
  82. strLJMC = strLJMC.Replace("\"", "");
  83. drLJInfo["LJID"] = Convert.ToInt32(strLJID);
  84. drLJInfo["LJBM"] = strLJBM;
  85. drLJInfo["LJMC"] = strLJMC;
  86. drLJInfo["Numbers"] = Convert.ToInt32(strNumbers);
  87. drLJInfo["Money"] = Convert.ToDecimal(strMoney);
  88. drLJInfo["beginDate"] = strOrderDate;
  89. drLJInfo["IsCancel"] = "否";
  90. drLJInfo["SFFH"] = "否";
  91. dtLJInfo.Rows.Add(drLJInfo);
  92. }
  93. }
  94. else
  95. {
  96. for (int i = 0; i < jaLJInfo.Count; i++)
  97. {
  98. JObject obj = (JObject)jaLJInfo[i];
  99. DataRow drLJInfo = dtLJInfo.NewRow();
  100. string strLJID = obj["LJID"].ToString().Trim();
  101. string strMoney = obj["Money"].ToString();
  102. string strLJBM = obj["LJBM"].ToString();
  103. string strLJMC = obj["LJMC"].ToString();
  104. string strDJNo = obj["DJBH"].ToString();
  105.  
  106. strLJID = strLJID.Replace("\"", "");
  107. strMoney = strMoney.Replace("\"", "");
  108. strLJBM = strLJBM.Replace("\"", "");
  109. strLJMC = strLJMC.Replace("\"", "");
  110. strDJNo = strDJNo.Replace("\"", "");
  111. drLJInfo["LJID"] = Convert.ToInt32(strLJID);
  112. drLJInfo["LJBM"] = strLJBM;
  113. drLJInfo["LJMC"] = strLJMC;
  114. drLJInfo["Money"] = Convert.ToDecimal(strMoney);
  115. drLJInfo["beginDate"] = strOrderDate;
  116. drLJInfo["DJNo"] = strDJNo;
  117. drLJInfo["SFFH"] = "否";
  118. drLJInfo["IsCancel"] = "否";
  119. dtLJInfo.Rows.Add(drLJInfo);
  120. }
  121. }
  122.  
  123. BT_XDMgr XDMgr = new BT_XDMgr();
  124. if (XDMgr.AddOrder(Order, dtLJInfo))
  125. {
  126. context.Response.Write("True");
  127.  
  128. }
  129. else
  130. {
  131. context.Response.Write("False");
  132. }
  133.  
  134. context.Response.End();
  135. }
  136.  
  137. public bool IsReusable
  138. {
  139. get
  140. {
  141. return false;
  142. }
  143. }
  144. }
  145. }

三、BLL层代码。

  1. /// <summary>
  2. /// 添加到数据库
  3. /// </summary>
  4. /// <param name="Order"></param>
  5. /// <param name="dt"></param>
  6. /// <returns></returns>
  7. public bool AddOrder(MT_DLS_Order Order,DataTable dt)
  8. {
  9.  
  10. DT_DLS_Order OrderDal = new DT_DLS_Order();
  11. DT_DLS_Order_Cong OrderCongDal = new DT_DLS_Order_Cong();
  12. DT_DLS_Order_LC OrderLCDal = new DT_DLS_Order_LC();
  13. decimal TotalMoney=0;
  14. //添加主单信息
  15. int OrderID = OrderDal.Add(Order);
  16. //添加订单ID在从表中
  17. for (int i = 0; i < dt.Rows.Count; i++)
  18. {
  19. dt.Rows[i]["OrderID"] = OrderID;
  20. TotalMoney = TotalMoney +Convert.ToDecimal( dt.Rows[i]["Money"].ToString().Trim());
  21. }
  22. //更新总金额
  23. Order.ID = OrderID;
  24. Order.OrderMoney = TotalMoney;
  25. //判断是否更新成功
  26. if (OrderDal.Update(Order))
  27. {
  28. //添加订单从表
  29. //判断是否添加从表成功
  30. if (OrderCongDal.AddOrderInfoByDataTable(dt))
  31. {
  32. //添加此订单的流程
  33. //查询出流程ID
  34. //查询所有的节点ID
  35. int ZFGDLS = Convert.ToInt32(ConfigurationSettings.AppSettings["ZFGDLS"].ToString());
  36. DataTable dtZFGDLSJD = new DataTable();
  37. dtZFGDLSJD = OrderLCDal.QueryAllJD(ZFGDLS);
  38. //判断流程中是否有节点
  39. if (dtZFGDLSJD.Rows.Count > 0)
  40. {
  41. DataTable dtOrderLC = new DataTable();
  42. dtOrderLC.TableName = "T_DLS_Order_LC";
  43. dtOrderLC.Columns.Add(new DataColumn("ID", typeof(int)));
  44. dtOrderLC.Columns.Add(new DataColumn("name", typeof(string)));
  45. dtOrderLC.Columns.Add(new DataColumn("beginDate", typeof(string)));
  46. dtOrderLC.Columns.Add(new DataColumn("OrderID", typeof(string)));
  47. dtOrderLC.Columns.Add(new DataColumn("LCID", typeof(string)));
  48. dtOrderLC.Columns.Add(new DataColumn("State", typeof(string)));
  49. dtOrderLC.Columns.Add(new DataColumn("CZRNo", typeof(string)));
  50. dtOrderLC.Columns.Add(new DataColumn("CZRName", typeof(string)));
  51.  
  52. for (int i = 0; i < dtZFGDLSJD.Rows.Count; i++)
  53. {
  54. DataRow drOrderLCInfo = dtOrderLC.NewRow();
  55.  
  56. drOrderLCInfo["OrderID"] = Order.ID;
  57. drOrderLCInfo["LCID"] = dtZFGDLSJD.Rows[i]["ID"].ToString().Trim();
  58.  
  59. if (i == 0)
  60. {
  61. drOrderLCInfo["State"] = "是";
  62. drOrderLCInfo["CZRNo"] = Order.DLSID;
  63. drOrderLCInfo["CZRName"] = Order.Company;
  64. drOrderLCInfo["beginDate"] = Order.beginDate;
  65. }
  66. else
  67. {
  68. drOrderLCInfo["State"] = "否";
  69. }
  70. dtOrderLC.Rows.Add(drOrderLCInfo);
  71. }
  72. //判断添加流程是否成功
  73. if (OrderLCDal.AddOrderLC(dtOrderLC))
  74. {
  75. return true;
  76. }
  77. else
  78. {
  79. return false;
  80. }
  81.  
  82. }
  83. else
  84. {
  85. return false;
  86. }
  87.  
  88. }
  89. else
  90. {
  91. return false;
  92. }
  93.  
  94. }
  95. else
  96. {
  97. return false;
  98. }
  99.  
  100. }

四、D层中关键的代码。

将传回去的DataTable直接存到数据库中:

代码如下:

  1. /// <summary>
  2. /// 将datatable中的数据批量插入数据库
  3. /// </summary>
  4. /// <param name="dt"></param>
  5. /// <returns></returns>
  6. public static Boolean makeDatatableIntoDatabase(DataTable dt)
  7. {
  8. SqlBulkCopy sqlbulkcopy = new SqlBulkCopy(connectionString, SqlBulkCopyOptions.UseInternalTransaction);
  9. sqlbulkcopy.DestinationTableName = dt.TableName;//数据库中的表名
  10.  
  11. try
  12. {
  13. sqlbulkcopy.WriteToServer(dt);
  14. return true;
  15. }
  16. catch (Exception ex)
  17. {
  18. return false;
  19. }
  20. }



       这里值得注意的是:我们传过来的DataTable TableName要和数据库中表名一致,DataTable中的字段顺序,类型、名称要和数据库中的字段字段顺序,类型、名称一致才行。

五、效果图。

六、综述。

就这四步把整个功能一一展现出来了用到的知识点很多。从这个功能中我的体会就是实习完回去赶紧多做些这样的小Demo保存好工作的时候直接用不要等到工作了慢慢的研究。其实我们做项目都是一个个小Demo拼接出来的。所以多做Demo工作上遇到了开发效率就高了。

  1.  

ASP.NET实现弹出框真分页将复选框选择的数据存到数据库中(四)的更多相关文章

  1. js做全选,用一个checkbox复选框做多个checkbox复选框的全选按钮,有一个复选框未被选择时,全选按钮的checked就为false

    用一个checkbox复选框做多个checkbox复选框的全选按钮,有一个复选框未被选择时,全选按钮的checked就为false,当所有checkbox都被选中时,全选按钮也被选中. 详解: 有两种 ...

  2. easyui的combobox将得到的数据设定为下拉框默认值和复选框设定默认值

    通过easyui做了一个表,表里是从数据库拿到的数据. 现在双击某一行,通过点击行的id取到这一行的所有数据,现在需要修改这些得到的数据, 其中部分数据是<select>这个选择的, 问题 ...

  3. 自动化测试基础篇--Selenium单选框(Radio)复选框(CheckBox)

    摘自:https://www.cnblogs.com/sanzangTst/p/7686602.html 一.什么是单选框.复选框? 二.单选框:radio 三.复选框:checkbox 四.判断是否 ...

  4. js自定义修改复选框单选框样式,清除复选框单选框默认样式

    之前做项目的时候,也遇到过需要按照设计稿把<input type="checkbox">和<input type="radio">的默认 ...

  5. JS基础入门篇(四)—this的使用,模拟单选框,选项卡和复选框

    1.this的使用 this js中的关键字 js内部已经定义好了,可以不声明 直接使用 this的指向问题 1. 在函数外部使用 this指向的是window 2. 在函数内部使用 有名函数 直接调 ...

  6. jquery easyui datagraid 对象显示的方法与datagraid、分页、复选框多选的数据显示

    ========================jsp==============================<table id="dg" fit="true& ...

  7. DOJO-dojox.grid.EnhancedGrid(带刷新函数,分页工具栏,复选框,行号等功能)

    转自:http://biancheng.dnbcw.info/javascript/395865.html dojo.require("dojox.grid.EnhancedGrid&quo ...

  8. gridcontrol复选框功能实现(超具体)

    博主这几天就准备离职了,以后不再做.Net开发.因此这应该是我写的最后一篇关于dev控件的博文.既然是最后一篇,那就写的具体一些.画个圆满的省略号...... 本文介绍gridcontrol怎样实现复 ...

  9. 在word中做复选框打对勾钩

    在word中做复选框打对勾钩 现在终于搞明白正确的操作方法 一.你在word里输入2610,按alt+X就能出 空checkbox 你在word里输入2611,按alt+X就能出 打了勾的checkb ...

随机推荐

  1. Flash视频播放器开发经验总结

    HTTP协议更优 目前几乎所有的视频点播网站全部采用HTTP协议传输数据.因为相对于诸如RTMP等协议来说,HTTP协议是无状态的,数据传输完毕就断开连接,这样服务器就可以腾出资源来服务更多的用户.而 ...

  2. Swift一些语法

    1.函数权限 public : 最大权限, 可以在当前framework和其他framework中访问internal : 默认的权限, 可以在当前framework中随意访问private : 私有 ...

  3. 多文件目录下makefile文件递归执行编译所有c文件

    首先说说本次嵌套执行makefile文件的目的:只需make根目录下的makefile文件,即可编译所有c文件,包括子目录下的. 意义:自动化编译行为,以后编译自己的c文件时可把这些makefile文 ...

  4. 用Ossim管理IT资产(视频)

    用Ossim管理IT资产 在Ossim中集成了Ocs Server,OCS用于帮助网络或系统管理员来跟踪网络中计算机配置与软件安装情况的应用程序.收集到硬件和系统信息,OCS Inventory 也可 ...

  5. 【spring 7】spring和Hibernate的整合:声明式事务

    一.声明式事务简介 Spring 的声明式事务管理在底层是建立在 AOP 的基础之上的.其本质是对方法前后进行拦截,然后在目标方法开始之前创建或者加入一个事务,在执行完目标方法之后根据执行情况提交或者 ...

  6. CLRS:Insert sort in in c

    #include<stdio.h>#include<string.h>#include<stdlib.h>#include<time.h>#define ...

  7. JS与JQ倒计时的写法

    页面需要制作一个倒计时的功能:然后度娘了一遍,找到两种写法,原生JS与JQ 的,经过测试原生JS在IE可能会有不刷新的现象所以结合了一个大神的JQ写法修改好了一个. 原生JS写法: HTML: < ...

  8. Arrays.asList(数组) 解说

    最近在用Arrays的asList()生成的List时,List元素的个数时而不正确. Java代码 一:Arrays.asList(数组)该方法是将数组转化为集合(该方法主要用于Object对象数组 ...

  9. view上添加点手势 button无法响应点击事件

    在view 上添加手势 有的时候  会把Button的 点击事件盖掉,这个 时候 我们用UITapGestureRecognizer的代理方法 //手势的代理方法 - (BOOL)gestureRec ...

  10. C puzzles详解【46-50题】

    第四十六题 What does the following macro do? #define ROUNDUP(x,n) ((x+n-1)&(~(n-1))) 题目讲解: 参考:http:// ...