/// <summary>
 /// 获取模版1的单据
 /// </summary>
 /// <param name="bnums">传递的单据编号的key名称</param>
 /// <param name="tabHead">返回的表头数据</param>
 /// <param name="tabContent">返回的表身数据</param>
 private void GetBillData(
     string bnums,
     DataSetDeliveryBillMgr.v_delivery_bill_head_join_custDataTable tabHead,
     DataSetDeliveryBillMgr.t_delivery_bill_contentDataTable tabContent
 )
 {
     //用户传入的送货单号
     var bnum = Request[bnums];
     if (bnum == null || bnum.Length == 0)
     {
         //Response.Write("未检测到传入的送货单号!");
         return;
     }
     var billNums = bnum.Split(new char[] { '|' }, StringSplitOptions.RemoveEmptyEntries);
     if (billNums.Length <= 0)
     {
         //Response.Write("传入的送货单号不正确!");
         return;
     }
     //去重
     var lBillNum = new List<string>();
     foreach (var billNum in billNums)
     {
         if (!lBillNum.Contains(billNum))
         {
             lBillNum.Add(billNum);
         }
     }
     //排序
     lBillNum.Sort();
     //修改标题
     this.Title = "送货单预览";
     //数据适配器
     using (var da = new v_delivery_bill_head_join_custTableAdapter())
     {
         //获取表头数据
         foreach (var billNum in lBillNum)
         {
             tabHead.Merge(da.GetDataByBillNum(billNum));
         }
         if (tabHead.Rows.Count <= 0)
         {
             //Response.Write("未找到送货单!");
             return;
         }
     }
     //数据适配器
     using (var da = new t_delivery_bill_contentTableAdapter())
     {
         //获取内容数据
         foreach (var billNum in lBillNum)
         {
             tabContent.Merge(da.GetDataByBillNum(billNum));
         }
     }
 }
        /// <summary>
        /// 添加获取到的数据到泛型变量
        /// </summary>
        /// <param name="tab">包含指定格式的数据表</param>
        /// <param name="dic">将数据填写到字典变量</param>
        /// <param name="strLotCard">之前已经存在的批量卡清单和数量</param>
        /// <param name="tabDeliveryLotCard">当前送货单</param>
        private void AddLotListWaitItem(
            DataSetDeliveryBillMgr.t_complete_lot_card_waitDataTable tab,
            ref Dictionary<string, LiItem> dic,
            string strLotCard,
            DataSetDeliveryBillMgr.t_delivery_bill_lot_cardDataTable tabDeliveryLotCard
        )
        {
            //检测是否含有之前的批量卡清单字典
            if (strLotCard != null)
            {
                //检测输入的内容
                string strReg = "[^>]+(?=</div>)";
                var matches = Regex.Matches(strLotCard, strReg);
                //取出匹配到的数据
                foreach (Match match in matches)
                {
                    //通过冒号分出批量卡号和数量
                    string[] strs = match.Value.Split(new char[] { ':' }, 2, StringSplitOptions.RemoveEmptyEntries);
                    //实例化项目类
                    var itm = new LiItem();
                    //设置实例的值
                    //批量卡序号
                    itm.LotId = strs[0];
                    //pcs参考数量
                    itm.MaxPcsQty = int.Parse(strs[1]);
                    //pcs数量
                    itm.PcsQty = itm.MaxPcsQty;
                    //将实例加入泛型变量
                    dic.Add(itm.LotId, itm);
                }
            }
            //加入数据表中的内容
            foreach (DataSetDeliveryBillMgr.t_complete_lot_card_waitRow row in tab.Rows)
            {
                //批量当前批量卡序号
                string lotId = row.lot_id;
                //该批量卡在本章送货单之前已经提交的交货数
                bool isExist = false;
                foreach (var dicItm in dic)
                {
                    //存在该批量卡就修改数量
                    if (dicItm.Key == lotId)
                    {
                        //该批量卡可以填写的总数量
                        int pcsQty = row.pcs_qty;
                        //查询之前该批量卡的交货数量
                        int pcsQty2 = (
                            from t in tabDeliveryLotCard
                            where t.lot_id == lotId
                            select t.pcs_qty
                        ).Sum();
                        //修改字典中的批量卡数量
                        dicItm.Value.MaxPcsQty = pcsQty + pcsQty2;
                        //设置为已经找到
                        isExist = true;
                        //退出循环
                        break;
                    }
                }
                //不存在该批量卡就添加
                if (!isExist)
                {
                    //实例化项目类
                    var itm = new LiItem();
                    //设置实例的值
                    //批量卡序号
                    itm.LotId = lotId;
                    //pcs参考数量
                    itm.MaxPcsQty = row.pcs_qty;
                    //将实例加入泛型变量
                    dic.Add(itm.LotId, itm);
                }
            }

            //执行排序
            dic = dic.OrderBy(rr => rr.Key.Substring(0, 5) + int.Parse(rr.Key.Substring(5)).ToString("000000"))
                .ToDictionary(rr => rr.Key, rr => rr.Value);
        }
 /// <summary>
 /// 设置单据清单内容指定行的数据到控件
 /// </summary>
 /// <param name="row">送货单当前数据行</param>
 /// <param name="iRow">当前行的索引号</param>
 private void SetBillContent(DataSetDeliveryBillMgr.t_delivery_bill_contentRow row, int iRow)
 {
     //检测是否含有数据
     bool isEmpty = row == null;
     //当前数据所在的行和批量卡清单行
     var trContentRow = (TableRow)tabDataListSon.FindControl("trContentRow" + iRow);
     var trLotCardRow = (TableRow)tabDataListSon.FindControl("trLotCardRow" + iRow);
     //检测是否找到该行
     if (trContentRow == null || trLotCardRow == null)
     {
         return;
     }
     //各控件
     var txtOrderId = (TextBox)trContentRow.FindControl("txtOrderId" + iRow);
     var txtProductNum = (TextBox)trContentRow.FindControl("txtProductNum" + iRow);
     var txtCustNum = (TextBox)trContentRow.FindControl("txtCustNum" + iRow);
     var txtOrderNum = (TextBox)trContentRow.FindControl("txtOrderNum" + iRow);
     var txtPcsQty = (TextBox)trContentRow.FindControl("txtPcsQty" + iRow);
     var txtFocPcsQty = (TextBox)trContentRow.FindControl("txtFocPcsQty" + iRow);
     var txtRemark = (TextBox)trContentRow.FindControl("txtRemark" + iRow);
     var tcLotCardList = (TableCell)trLotCardRow.FindControl("tcLotCardList" + iRow);
     var hdLotCardList = (HtmlInputHidden)this.FindControl("hdLotCardList" + iRow);
     //写入数据
     txtOrderId.Text = isEmpty ? string.Empty : row.order_id;
     txtProductNum.Text = isEmpty ? string.Empty : row.product_num;
     txtCustNum.Text = isEmpty ? string.Empty : row.cust_num;
     txtOrderNum.Text = isEmpty ? string.Empty : row.order_num;
     txtPcsQty.Text = isEmpty ? string.Empty : row.pcs_qty.ToString();
     txtFocPcsQty.Text = isEmpty || row.Isfoc_pcs_qtyNull() ? string.Empty : row.foc_pcs_qty.ToString();
     txtRemark.Text = isEmpty || row.IsremarkNull() ? string.Empty : row.remark;
     tcLotCardList.Text = isEmpty ? string.Empty : row.lot_id_list;
     //将当前的值写入隐藏对象
     hdLotCardList.Value = isEmpty ? string.Empty : row.lot_id_list.Replace("<", "|l|").Replace(">", "|g|");
 }