将Datatable一分为二
将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一分为二相关推荐
- datatable java实现分页_jQuery Datatable - 使用Php的服务器端处理数据分页
我有jquery datatable分页的问题(服务器端处理) . 例如,我在数据库中有 24 条记录 . 计数正确显示,总分页也正确显示 . 当我点击 Next or 2nd page 时,它会根据 ...
- ashx导出dataTable为Excel
一,datatable导出Excel,用户可以选择路径,方法如下: /// <summary>/// DataTable导出到Excel/// </summary>/// &l ...
- 把ListT转换为DataTable
下面这个学习,把List<T>转换为Datatable. 下面先创建一个对象T: class Ay{private int _ID;public int ID{get { return _ ...
- datatable和dataset的区别
DataSet 是离线的数据源 DataTable 是数据源中的表.当然也可以自己建一张虚表.插入数据库中 DataSet是DataTable的容器DataSet可以比作一个内存中的数据库,DataT ...
- 深入.NET DataTable
1.ADO.NET相关对象一句话介绍 1)DataAdapter: DataAdapter实际是一个SQL语句集合,因为对Database的操作最终需要归结到SQL语句. 2)Dataset: Dat ...
- datatable自动增加序号
{"targets": [0],"visible": true,"render": function (data, type, full, ...
- 在DataTable中更新、删除数据
在DataTable中选择记录 /*在DataTable中选择记录*//* 向DataTable中插入记录如上,更新和删除如下:* ----但是在更新和删除前,首先要找出要更新和删除的记录.* 一种方 ...
- dataTable 从服务器获取数据源的两种表现形式
1 var table = $('#example1').DataTable({ 2 "processing": true,//加载效果 3 "autoWidth&quo ...
- DataTable的Compute功能详解
在为筛选器创建表达式时,用单引号将字符串括起来: "LastName = 'Jones'" 下面的字符是特殊字符,如下面所解释的,如果它们用于列名称中,就必须进行转义: \n (n ...
最新文章
- 科大星云诗社动态20210317
- C语言函数class,C语言--7-class-while和函数.ppt
- 20145315 《Java程序设计》第五周学习总结
- ThinkPHP讲解(一)框架基础
- Mac下使用tree命令
- 人的烦恼大部分来自于没钱
- [递推][jzyzojP1252]:递推专练4
- cgblib 代理接口原理_Spring5参考指南-AOP代理
- word中的总页数不包括封面、目录
- 尾纤SC、ST、FC、LC区分
- Redis 事务 实例
- 关于vc6++编译DDK驱动出现的问题fatal error C1083: Cannot open include file: 'specstrings.h': No such file or dir
- 谷歌无法打开微信二维码链接解决方案 之 使用谷歌模拟微信浏览器
- 乒乓球比赛赛程_2018国际乒联乒乓球重大赛事详细赛程表,看点爆点早知道
- 1070: 小汽车的位置 Python
- 内存映射文件之剖析(一)
- POJ 2886:Who Gets the Most Candies?
- ucGUI 储存设备绘制分析
- [项目管理-9]:软硬件项目管理 - 风险管理(坑)
- 迅捷CAD工具箱,字母阵列功能