将Datatable一分为二

本文介绍了一个订餐系统的批量充值功能实现方法,通过读取Excel文件并利用DataTable进行数据验证及处理,最终完成批量充值并将错误数据导出。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

将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>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值