将Datatable一分为二
生活随笔
收集整理的這篇文章主要介紹了
将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一分为二的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: EasyUI的combobox用法
- 下一篇: jQuery的概念