将Datatable一分为二

在订餐系统中,有一个需求就是批量导入充值表,对饭卡进行批量的充值,如果一张一张饭卡的充值,当员工多的时候会非常的繁琐。

这里的充值表是excel形式的,首先,充值的时候肯定要检索其中的用户信息,将信息符合要求的进行充值,不符合要求的会报错导出,并且整理到一个excel中全部导出。

首先,将excel导入的时候,全部读取到一个datatable中,然后,对其中的用户充值信息进行检索,如何信息符合要求会全部放到一个datatable中,如果不符合要求都会放到另一个datatable中。

将符合要求的datatable,传给充值过程进行批量的充值,将不符合要求的datatable导出到一个excel中,返回给操作员。

<span style="font-size:24px;">public void btnInput_Click(object sender, EventArgs e){Stream stream = Request.Files[0].InputStream;//判断是否选择文件if (file.PostedFile.FileName.ToString().Trim() == string.Empty){Page.ClientScript.RegisterStartupScript(Page.GetType(), "message", "<script language='javascript' defer>alert('请选择要导入的Excel文件!');</script>");return;}string FileName = Server.MapPath("~/") + Path.GetFileName(file.FileName);//检查是否存在文件,存在删除if (File.Exists(FileName)){File.Delete(FileName);}file.SaveAs(FileName);  //上传文件到服务器string path = FileName;//获取服务器文件路径//读取excel文件数据DataTable dt = new DataTable();try{dt = ExcelToDataTable(path);//判断数据是否为空if (dt == null){Page.ClientScript.RegisterStartupScript(Page.GetType(), "message", "<script language='javascript' defer>alert('您选择的文件为空,请检查后再导入,谢谢!');</script>");return;}#region 验证数据的有效性//存放正确的数据DataTable dtAccess = new DataTable();//添加列dtAccess.Columns.Add("cardID");dtAccess.Columns.Add("ownerName");dtAccess.Columns.Add("addCash");dtAccess.Columns.Add("error");//存放错误的数据DataTable dtFail = new DataTable();//添加列dtFail.Columns.Add("cardID");dtFail.Columns.Add("ownerName");dtFail.Columns.Add("addCash");dtFail.Columns.Add("error");for (int i = 0; i < dt.Rows.Count; i++){//获取卡号string cardID = dt.Rows[i][0].ToString();//获取姓名string ownerName = dt.Rows[i][1].ToString();//获取金额string addCash = dt.Rows[i][2].ToString();//验证卡号是否存在bool blCard = card.CheckCardInfo(cardID);//验证卡号物理地址bool blMainCard = card.CheckMainCardInfo(cardID);//验证卡号是否为员工bool blOwnerName = card.CheckOwnerNameInfo(cardID);//验证卡号是否正在使用bool blStatus = card.CheckCardInfoStatus(cardID);//验证金额是否为数字bool blCash = IsNumber(dt.Rows[i][2].ToString().Trim());//数据格式正确if (blCard == true && blMainCard == true && blOwnerName == true && blStatus == true && blCash == true){//添加数据DataRow dr = dtAccess.NewRow();dr["cardID"] = cardID;dr["ownerName"] = ownerName;dr["addCash"] = addCash;dtAccess.Rows.Add(dr);dtAccess.AcceptChanges();}//数据格式错误else{//添加数据DataRow dr = dtFail.NewRow();dr["cardID"] = cardID;dr["ownerName"] = ownerName;dr["addCash"] = addCash;dtFail.Rows.Add(dr);dtFail.AcceptChanges();}}#endregion#region 导入格式正确的数据//导入格式正确的数据for (int i = 0; i < dtAccess.Rows.Count; i++){CardBll cardbll = new CardBll();//实例化卡表CardAddLog cardinfo = new CardAddLog();//实例化充值表DataTable dtCard = new DataTable();//实例化datatable//获取卡号string cardID = dtAccess.Rows[i][0].ToString();//获取卡号姓名string ownerName = dtAccess.Rows[i][1].ToString();//获取充值金额string addCash = dtAccess.Rows[i][2].ToString();//查询卡号信息List<Card> Cardlist = card.QueryCardInfo(cardID);cardinfo.mainCardId = Cardlist[0].mainCardId.ToString().Trim();//获取卡号物理地址cardinfo.cardId = cardID;//获取卡号cardinfo.ownerName = ownerName;//获取卡号姓名cardinfo.realAddCash = Convert.ToDecimal(dtAccess.Rows[i][2].ToString().Trim());//获取充值金额cardinfo.addCash = Convert.ToDecimal(dtAccess.Rows[i][2].ToString().Trim());//获取充值金额cardinfo.addCashTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");//得到充值时间cardinfo.isSubmit = "T";//获取样品cardinfo.userId = Session["Admin"].ToString();//获取操作人//更新卡表和充值记录bool flagSuccss = cardbll.rechargebycardided(cardinfo);if (flagSuccss == false){Page.ClientScript.RegisterStartupScript(Page.GetType(), "message", "<script language='javascript' defer> alert('批量充值失败,请联系管理员!');</script>");}}#endregion#region 导出错误格式的数据if (dtFail.Rows.Count != 0){NpoiExcel(dtFail, "导入失败数据");}#endregion//删除服务器文件if (File.Exists(FileName)){File.Delete(FileName);}Page.ClientScript.RegisterStartupScript(Page.GetType(), "message", "<script language='javascript'>alert('批量导入成功!'); </script>");}catch (Exception){Page.ClientScript.RegisterStartupScript(Page.GetType(), "message", "<script language='javascript' defer> alert('批量充值失败,请联系管理员!');</script>");}}
</span>

将Datatable一分为二相关推荐

  1. datatable java实现分页_jQuery Datatable - 使用Php的服务器端处理数据分页

    我有jquery datatable分页的问题(服务器端处理) . 例如,我在数据库中有 24 条记录 . 计数正确显示,总分页也正确显示 . 当我点击 Next or 2nd page 时,它会根据 ...

  2. ashx导出dataTable为Excel

    一,datatable导出Excel,用户可以选择路径,方法如下: /// <summary>/// DataTable导出到Excel/// </summary>/// &l ...

  3. 把ListT转换为DataTable

    下面这个学习,把List<T>转换为Datatable. 下面先创建一个对象T: class Ay{private int _ID;public int ID{get { return _ ...

  4. datatable和dataset的区别

    DataSet 是离线的数据源 DataTable 是数据源中的表.当然也可以自己建一张虚表.插入数据库中 DataSet是DataTable的容器DataSet可以比作一个内存中的数据库,DataT ...

  5. 深入.NET DataTable

    1.ADO.NET相关对象一句话介绍 1)DataAdapter: DataAdapter实际是一个SQL语句集合,因为对Database的操作最终需要归结到SQL语句. 2)Dataset: Dat ...

  6. datatable自动增加序号

    {"targets": [0],"visible": true,"render": function (data, type, full, ...

  7. 在DataTable中更新、删除数据

    在DataTable中选择记录 /*在DataTable中选择记录*//* 向DataTable中插入记录如上,更新和删除如下:* ----但是在更新和删除前,首先要找出要更新和删除的记录.* 一种方 ...

  8. dataTable 从服务器获取数据源的两种表现形式

    1 var table = $('#example1').DataTable({ 2 "processing": true,//加载效果 3 "autoWidth&quo ...

  9. DataTable的Compute功能详解

    在为筛选器创建表达式时,用单引号将字符串括起来: "LastName = 'Jones'" 下面的字符是特殊字符,如下面所解释的,如果它们用于列名称中,就必须进行转义: \n (n ...

最新文章

  1. 科大星云诗社动态20210317
  2. C语言函数class,C语言--7-class-while和函数.ppt
  3. 20145315 《Java程序设计》第五周学习总结
  4. ThinkPHP讲解(一)框架基础
  5. Mac下使用tree命令
  6. 人的烦恼大部分来自于没钱
  7. [递推][jzyzojP1252]:递推专练4
  8. cgblib 代理接口原理_Spring5参考指南-AOP代理
  9. word中的总页数不包括封面、目录
  10. 尾纤SC、ST、FC、LC区分
  11. Redis 事务 实例
  12. 关于vc6++编译DDK驱动出现的问题fatal error C1083: Cannot open include file: 'specstrings.h': No such file or dir
  13. 谷歌无法打开微信二维码链接解决方案 之 使用谷歌模拟微信浏览器
  14. 乒乓球比赛赛程_2018国际乒联乒乓球重大赛事详细赛程表,看点爆点早知道
  15. 1070: 小汽车的位置 Python
  16. 内存映射文件之剖析(一)
  17. POJ 2886:Who Gets the Most Candies?
  18. ucGUI 储存设备绘制分析
  19. [项目管理-9]:软硬件项目管理 - 风险管理(坑)
  20. 迅捷CAD工具箱,字母阵列功能

热门文章

  1. 我的第一篇blog 【随意】
  2. 波卡链Substrate (2)系统框架
  3. C++ Primer 5th笔记(chap 18 大型程序工具) 多重继承与虚继承
  4. 使用kuberbuilder创建工程示例
  5. 【Flask】RESTful的响应处理
  6. Linux常用的基本命令vi、ps、kill(四)
  7. 11-Memory Management Examples
  8. optee中utee syscall的实现(系统调用实现)
  9. [reference]-ARM缩写
  10. 数据结构常见算法集锦