/// <summary> /// 检查用户的输入是否合法.合法返回true,否则返回false /// </summary> /// <returns></returns> private bool CheckUserInput(ref t_market_contract_content[] arr) { //先检查合同表头 //检查合同内容 var content = hfContent.Value; if (content.Trim().Length == 0) { throw new Exception("合同内容为空!"); } JavaScriptSerializer jss = new JavaScriptSerializer(); object o = jss.Deserialize(content, typeof(t_market_contract_content[])); arr = (t_market_contract_content[])o; //可以提交 return true; }
/// <summary> /// 更新合同表头和多行内容 /// </summary> /// <param name="e">传入的带有数据的事件参数</param> /// <returns></returns> private bool UpdateData(FormViewUpdateEventArgs e, t_market_contract_content[] arr) { //合同表头、内容、附件数据适配器 using (var daHead = new t_market_contract_headTableAdapter()) using (var daContent = new t_market_contract_contentTableAdapter()) using (var daAppendix = new t_market_contract_appendixTableAdapter()) using (var daAppendixTmp = new t_market_contract_appendix_tempTableAdapter()) { var conn = daHead.Connection; //设置为同一连接对象 daHead.Connection = daAppendix.Connection = daAppendixTmp.Connection = conn; //打开数据库连接 conn.Open(); //开启事务 using (var tran = conn.BeginTransaction(System.Data.IsolationLevel.RepeatableRead)) { try { //绑定事务 daHead.Transaction = daContent.Transaction = daAppendix.Transaction = daAppendixTmp.Transaction = tran; //原合同单号 string originalBillNum = e.Keys["bill_num"].ToString(); //新合同单号 string billNum = e.NewValues["bill_num"].ToString(); //参数 var pars = daHead.Adapter.UpdateCommand.Parameters; //新的表头数据 IOrderedDictionary values = e.NewValues; //遍历所有参数 for (int i = 0, len = pars.Count; i < len; i++) { //取字段名称 var name = pars[i].ParameterName.Replace("@", ""); //字段值 object filedValue = null; if (name == "Original_bill_num") { //原合同单号 filedValue = originalBillNum; } else { //内容 filedValue = values[name]; } var t = pars[i].DbType; //日期或时间字段为空 if ((t == DbType.DateTime || t == DbType.Date || t == DbType.DateTime2 || t == DbType.Time) && filedValue.ToString().Length == 0) { filedValue = DBNull.Value; } //记录值 pars[i].Value = filedValue; } //执行更新 int result = daHead.Adapter.UpdateCommand.ExecuteNonQuery(); if (result == 0) { //抛出错误 throw new Exception("修改合同表头失败!"); } //先删除旧合同内容 daContent.DeleteByBillNum(originalBillNum); //遍历合同内容 foreach (t_market_contract_content row in arr) { //新增一条合同内容 if (daContent.Insert(row.bill_num, row.row_id, row.material_code, row.product_num, row.size_length, row.size_width, row.pinchu, row.material_specification, row.contract_price, row.layer_count, row.process_require_chengxing, row.process_require_biaomian, row.process_require_wf, row.process_require_sm, row.unit_price_per_pcs, row.moju_rate_per_set, row.cejia_rate_per_set, row.content_remark, row.appendix_id) <= 0) { //抛出错误 throw new Exception("修改合同内容失败!"); } } //删除合同附件表 if (daAppendix.DeleteByBillNum(originalBillNum) <= 0) { //抛出错误 throw new Exception("修改合同附件失败!"); } //获取保存在临时表中的合同附件内容 var tab = daAppendixTmp.GetDataByBillNum(billNum); //遍历所有行 foreach (ydERPTY.DAL.Market.DataSetAppendix.t_market_contract_appendix_tempRow row in tab.Rows) { //新增数据到合同附件 daAppendix.Insert(row.bill_num, row.row_id, row.delivery_date, row.order_qty, row.contract_class, row.item1, row.value1, row.json1, row.item2, row.value2, row.json2, row.item3, row.value3, row.json3, row.item4, row.value4, row.json4, row.item5, row.value5, row.json5, row.item6, row.value6, row.json6, row.item7, row.value7, row.json7, row.item8, row.value8, row.json8, row.item9, row.value9, row.json9, row.item10, row.value10, row.json10, row.item11, row.value11, row.json11, row.item12, row.value12, row.json12, row.item13, row.value13, row.json13, row.item14, row.value14, row.json14, row.item15, row.value15, row.json15, row.item16, row.value16, row.json16, row.item17, row.value17, row.json17, row.item18, row.value18, row.json18, row.item19, row.value19, row.json19, row.item20, row.value20, row.json20, row.remark, row.add_person, row.add_time, row.audit, row.audit_time, row.eng, row.eng_time, row.last_change_time); } //删除合同附件临时表 daAppendixTmp.DeleteByBillNum(billNum); //提交事务 tran.Commit(); } catch (Exception ex) { //事务回滚 tran.Rollback(); throw ex; } } } return true; }