| | |
| | | using DevExpress.XtraRichEdit.Model; |
| | | using Gs.DevApp.DevFrm.Rpt; |
| | | using Gs.DevApp.Entity; |
| | | using Gs.DevApp.ToolBox; |
| | |
| | | using System; |
| | | using System.Collections.Generic; |
| | | using System.Data; |
| | | using System.Drawing; |
| | | using System.Threading.Tasks; |
| | | using System.Windows.Forms; |
| | | |
| | |
| | | Gs.DevApp.ToolBox.UtilityHelper.SetGridViewParameterMx(gvMx1); |
| | | Gs.DevApp.ToolBox.UtilityHelper.SetGridViewParameterMx(gvMx2); |
| | | Gs.DevApp.ToolBox.UtilityHelper.SetGridViewParameterMx(gvMx3); |
| | | Gs.DevApp.ToolBox.UtilityHelper.SetGridViewParameterMx(gvMxL1); |
| | | Gs.DevApp.ToolBox.UtilityHelper.SetGridViewParameterMx(gvMxL2); |
| | | Gs.DevApp.ToolBox.UtilityHelper.SetGridViewParameterMx(gvMxL3); |
| | | Gs.DevApp.ToolBox.UtilityHelper.SetGridViewParameter(gridView1, null, null, "", "", (value) => |
| | | { |
| | | Gs.DevApp.ToolBox.UtilityHelper.JumpTab(xtraTabControl1, 0); |
| | |
| | | }); |
| | | Gs.DevApp.ToolBox.UtilityHelper.SetTabParameter(gridView1, xtraTabControl1, pageBar1, (value) => |
| | | { |
| | | |
| | | getModel(value); |
| | | |
| | | |
| | | }, (value) => |
| | | { |
| | | getPageList(this.pageBar1.CurrentPage); |
| | |
| | | string rowGuid = lbMxGuid.Text.Trim(); |
| | | SelectDeleteBar frm = new SelectDeleteBar(rowGuid, "采购入库"); |
| | | string strCodeList = ""; |
| | | string strAction = ""; |
| | | frm.UpdateParent += (ss, ee) => |
| | | { |
| | | strCodeList = ee.StringSingle; |
| | | strAction = ee.Data; |
| | | }; |
| | | frm.ShowDialog(); |
| | | if (string.IsNullOrEmpty(strCodeList)) |
| | | return; |
| | | try |
| | | if (strAction == "print") |
| | | { |
| | | string rptParameter = "rpt_Arrival{" |
| | | + "100"//重打都是传100, |
| | | + "," + "" |
| | | + "," + "" |
| | | + "," + "" |
| | | + "," + "" |
| | | + "," + strCodeList |
| | | + "}"; |
| | | using (Form rpt = new RptPreview(rowGuid, rptParameter)) |
| | | try |
| | | { |
| | | rpt.ShowDialog(); |
| | | string rptParameter = "rpt_Arrival{" |
| | | + "100"//重打都是传100, |
| | | + "," + "" |
| | | + "," + "" |
| | | + "," + "" |
| | | + "," + "" |
| | | + "," + strCodeList |
| | | + "}"; |
| | | using (Form rpt = new RptPreview(rowGuid, rptParameter)) |
| | | { |
| | | rpt.ShowDialog(); |
| | | } |
| | | frm.Close(); |
| | | } |
| | | frm.Close(); |
| | | catch (Exception ex) |
| | | { |
| | | MsgHelper.ShowError(ex.Message); |
| | | } |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | MsgHelper.ShowError(ex.Message); |
| | | } |
| | | |
| | | }; |
| | | |
| | | // -------------------- gvMx3 打印事件 -------------------- |
| | |
| | | string rowGuid = txt_releaseNo.Text.Trim(); |
| | | SelectDeleteBar frm = new SelectDeleteBar(rowGuid, "到货条码(合并)码"); // 标题区分来源 |
| | | string strCodeList = ""; |
| | | string strAction = ""; |
| | | frm.UpdateParent += (ss, ee) => |
| | | { |
| | | strCodeList = ee.StringSingle; |
| | | strAction = ee.Data; |
| | | }; |
| | | frm.ShowDialog(); |
| | | if (string.IsNullOrEmpty(strCodeList)) |
| | | return; |
| | | if (strAction == "print") |
| | | { |
| | | try |
| | | { |
| | | string rptParameter = "rpt_Arrival_Hb{" |
| | | + "100"//重打都是传100, |
| | | + "," + "" |
| | | + "," + "" |
| | | + "," + "" |
| | | + "," + "" |
| | | + "," + strCodeList |
| | | + "}"; |
| | | using (Form rpt = new RptPreview(rowGuid, rptParameter)) |
| | | { |
| | | rpt.ShowDialog(); |
| | | } |
| | | frm.Close(); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | MsgHelper.ShowError(ex.Message); |
| | | } |
| | | } |
| | | |
| | | }; |
| | | |
| | | |
| | | // --------------------gvMx3 ucBtnPrintOne1 批量打印事件(优化版)-------------------- |
| | | this.ucBtnPrintOne1.btnPrintClick += (s, e) => |
| | | { |
| | | // 1. 基础验证:主表行选择 |
| | | string mainGuid = lbGuid.Text.Trim(); |
| | | if (string.IsNullOrEmpty(mainGuid) || mainGuid.Length < 10) |
| | | { |
| | | Gs.DevApp.ToolBox.MsgHelper.ShowError("请先在主表中选择数据行!"); |
| | | this.ucBtnPrintOne1.rptParameter = "return false"; |
| | | return; |
| | | } |
| | | |
| | | // 2. 获取明细数据源 |
| | | DataTable dtDetails = gcMx3.DataSource as DataTable; |
| | | if (dtDetails == null || dtDetails.Rows.Count == 0) |
| | | { |
| | | Gs.DevApp.ToolBox.MsgHelper.ShowError("当前主表无关联的明细数据,请先加载明细!"); |
| | | this.ucBtnPrintOne1.rptParameter = "return false"; |
| | | return; |
| | | } |
| | | |
| | | // 3. 筛选可打印明细(逻辑不变) |
| | | List<string> validReleaseNos = new List<string>(); |
| | | List<string> validPrintQtys = new List<string>(); |
| | | string releaseNoField = "releaseNo"; |
| | | |
| | | if (!dtDetails.Columns.Contains(releaseNoField)) |
| | | { |
| | | Gs.DevApp.ToolBox.MsgHelper.ShowError($"明细数据源缺少必要字段:{releaseNoField}"); |
| | | this.ucBtnPrintOne1.rptParameter = "return false"; |
| | | return; |
| | | } |
| | | |
| | | foreach (DataRow row in dtDetails.Rows) |
| | | { |
| | | string rowReleaseNo = row[releaseNoField]?.ToString()?.Trim() ?? ""; |
| | | if (string.IsNullOrEmpty(rowReleaseNo) || rowReleaseNo.Length < 5) |
| | | { |
| | | Gs.DevApp.ToolBox.MsgHelper.ShowError($"跳过无效明细行:缺少或无效的releaseNo"); |
| | | continue; |
| | | } |
| | | |
| | | string kQtyStr = row["kQty"]?.ToString()?.Trim() ?? "0"; |
| | | if (!Gs.DevApp.ToolBox.UtilityHelper.IsNumeric3(kQtyStr) |
| | | || !decimal.TryParse(kQtyStr, out decimal kQty) |
| | | || kQty <= 0) |
| | | { |
| | | Gs.DevApp.ToolBox.MsgHelper.ShowError($"跳过明细行(releaseNo:{rowReleaseNo}):可打印数量无效或<=0"); |
| | | continue; |
| | | } |
| | | |
| | | if (!validReleaseNos.Contains(rowReleaseNo)) |
| | | { |
| | | validReleaseNos.Add(rowReleaseNo); |
| | | validPrintQtys.Add(kQty.ToString("F2")); |
| | | } |
| | | else |
| | | { |
| | | Gs.DevApp.ToolBox.MsgHelper.ShowError($"跳过重复明细行(releaseNo:{rowReleaseNo}):已包含该releaseNo"); |
| | | } |
| | | } |
| | | |
| | | if (validReleaseNos.Count == 0) |
| | | { |
| | | Gs.DevApp.ToolBox.MsgHelper.ShowError("没有可批量打印的明细行(所有行均为无效数据或可打印数量<=0)"); |
| | | this.ucBtnPrintOne1.rptParameter = "return false"; |
| | | return; |
| | | } |
| | | |
| | | // 4. 组装参数(适配_rptGetParameterP解析逻辑) |
| | | string releaseNosStr = string.Join("|", validReleaseNos); |
| | | string printQtysStr = string.Join("|", validPrintQtys); |
| | | |
| | | // 仅传6个关键参数,对应解析方法的s0-s5 |
| | | string[] reportParams = new string[] |
| | | { |
| | | "batch", // s0 → @in1:批量标识 |
| | | "0", // s1 → @in2:占位 |
| | | "0", // s2 → @in3:余量 |
| | | "1", // s3 → @in4:张数 |
| | | printQtysStr, // s4 → @in5:数量列表 |
| | | releaseNosStr // s5 → @in6:releaseNo列表 |
| | | }; |
| | | |
| | | /*string paramContent = string.Join(",", reportParams); |
| | | string rptParam = $"rpt_Arrival_One{{{paramContent}}}"; |
| | | |
| | | this.ucBtnPrintOne1.guidKey = mainGuid; |
| | | this.ucBtnPrintOne1.rptParameter = rptParam; |
| | | |
| | | // 5. 调用预览(逻辑不变) |
| | | try |
| | | { |
| | | string rptParameter = "rpt_Arrival_Hb{" |
| | | + "100"//重打标识 |
| | | + "," + "" |
| | | + "," + "" |
| | | + "," + "" |
| | | + "," + "" |
| | | + "," + strCodeList |
| | | + "}"; |
| | | using (Form rpt = new RptPreview(rowGuid, rptParameter)) |
| | | using (Form rptPreviewForm = new RptPreview(mainGuid, rptParam)) |
| | | { |
| | | rpt.ShowDialog(); |
| | | DialogResult previewResult = rptPreviewForm.ShowDialog(); |
| | | if (previewResult == DialogResult.OK) |
| | | { |
| | | getModel(mainGuid); |
| | | Gs.DevApp.ToolBox.MsgHelper.ShowError($"批量打印完成!共打印 {validReleaseNos.Count} 条有效明细"); |
| | | } |
| | | else if (previewResult == DialogResult.Cancel) |
| | | { |
| | | Gs.DevApp.ToolBox.MsgHelper.ShowError("用户取消批量打印操作"); |
| | | } |
| | | } |
| | | frm.Close(); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | MsgHelper.ShowError(ex.Message); |
| | | string errorMsg = $"批量打印异常:{ex.Message}"; |
| | | if (ex.InnerException != null) |
| | | { |
| | | errorMsg += $"\n内部错误:{ex.InnerException.Message}"; |
| | | } |
| | | Gs.DevApp.ToolBox.MsgHelper.ShowError(errorMsg); |
| | | this.ucBtnPrintOne1.rptParameter = "return false"; |
| | | } |
| | | */ |
| | | |
| | | this.ucBtnPrintOne1.guidKey = mainGuid; |
| | | this.ucBtnPrintOne1.rptParameter = "rpt_Arrival_One{" |
| | | + string.Join(",", reportParams) // 拼接reportParams数组元素 |
| | | + "}"; |
| | | // 6. 清空控件 |
| | | txt_iCount_2.Text = ""; |
| | | txt_psnQty_2.Text = ""; |
| | | txt_releaseNo.Text = ""; |
| | | }; |
| | | |
| | | |
| | | //明细行切换事件 |
| | | // 关键:绑定gvMx1和gvMx3的焦点行变化事件 |
| | | gvMx1.FocusedRowChanged += GvMx1_FocusedRowChanged; |
| | | gvMx3.FocusedRowChanged += GvMx3_FocusedRowChanged; // 取消注释并绑定事件 |
| | | //gvMx3打印自动计算 |
| | | //gvMx1打印自动计算 |
| | | txt_psnQty_1.TextChanged += (s, e) => |
| | | { |
| | | Gs.DevApp.ToolBox.UtilityHelper.PrintJiSuan(txt_psnQty_1, txt_iCount_1, txt_kQty.Text.Trim(), radOut, txt_yuliang_1); |
| | |
| | | }; |
| | | |
| | | |
| | | |
| | | ////底部汇总启用 |
| | | //gvMx1.OptionsView.ShowFooter = true; |
| | | //// 为某一列设置求和汇总 |
| | |
| | | UtilityHelper.SetupGridSummary(gvMx1, "quantity", "okRkqty"); |
| | | UtilityHelper.SetupGridSummary(gvMxL1, "quantity", "okRkqty"); |
| | | |
| | | // 检查数据加载后再设置颜色 |
| | | this.Load += (s, e) => { |
| | | |
| | | |
| | | System.Windows.Forms.Timer timer = new System.Windows.Forms.Timer(); |
| | | timer.Interval = 1000; // 1秒后执行,确保数据已加载 |
| | | timer.Tick += (sender, args) => { |
| | | timer.Stop(); |
| | | timer.Dispose(); |
| | | |
| | | // 使用新的简化格式设置检验结果颜色 |
| | | UtilityHelper.SetSimpleGridColor(gvMxL1, "jyjg", "contains不合格", "Cell", Color.Red); |
| | | UtilityHelper.SetSimpleGridColor(gvMxL1, "jyjg", "contains合格", "Cell", Color.Green); |
| | | UtilityHelper.SetSimpleGridColor(gvMxL1, "jyjg", "contains免检", "Cell", Color.Green); |
| | | |
| | | UtilityHelper.SetSimpleGridColor(gvMxL2, "jyjg", "contains不合格", "Cell", Color.Red); |
| | | UtilityHelper.SetSimpleGridColor(gvMxL2, "jyjg", "contains合格", "Cell", Color.Green); |
| | | UtilityHelper.SetSimpleGridColor(gvMxL2, "jyjg", "contains免检", "Cell", Color.Green); |
| | | |
| | | UtilityHelper.SetSimpleGridColor(gvMx1, "jyjg", "contains不合格", "Cell", Color.Red); |
| | | UtilityHelper.SetSimpleGridColor(gvMx1, "jyjg", "contains合格", "Cell", Color.Green); |
| | | UtilityHelper.SetSimpleGridColor(gvMx1, "jyjg", "contains免检", "Cell", Color.Green); |
| | | |
| | | UtilityHelper.SetSimpleGridColor(gvMx3, "jyjg", "contains不合格", "Cell", Color.Red); |
| | | UtilityHelper.SetSimpleGridColor(gvMx3, "jyjg", "contains合格", "Cell", Color.Green); |
| | | UtilityHelper.SetSimpleGridColor(gvMx3, "jyjg", "contains免检", "Cell", Color.Green); |
| | | |
| | | // 当收货数量(quantity)大于已入库数量(okRkqty)时,整行显示橙色 |
| | | // UtilityHelper.SetSimpleGridColor(gvMx1, "", "quantity-okRkqty>0", "Row", Color.Orange); |
| | | |
| | | // 当可打印数量(kQty)小于等于0时,整行显示灰色 |
| | | //UtilityHelper.SetSimpleGridColor(gvMx1, "", "kQty<=0", "Row", Color.Gray); |
| | | UtilityHelper.SetSimpleGridColor(gridView1, "barRatio", "=100.00%", "Cell", Color.Green); |
| | | //入库比例 |
| | | UtilityHelper.SetSimpleGridColor(gridView1, "rkbl", "=100.00%", "Cell", Color.Green); |
| | | }; |
| | | timer.Start(); |
| | | }; |
| | | |
| | | } |
| | | private void GridView1_ColumnFilterChanged(object sender, EventArgs e) |
| | |
| | | } |
| | | private void getModel(string strGuid) |
| | | { |
| | | gcMx3.DataSource = null; |
| | | gcMx1.DataSource = null; |
| | | gcMx2.DataSource = null; |
| | | gcMx3.DataSource = null; |
| | | |
| | | bool isEdit = false; |
| | | if (toolBarMenu1.currentAction == "add") return; |
| | | if (toolBarMenu1.currentAction == "edit") isEdit = true; |
| | |
| | | { |
| | | string strJson = UtilityHelper.HttpPost("", _webServiceName + "GetModel", JsonConvert.SerializeObject(_obj)); |
| | | ReturnModel<dynamic> _rtn = ToolBox.UtilityHelper.ReturnToDynamic(strJson); |
| | | |
| | | if (_rtn.rtnCode > 0) |
| | | { |
| | | dynamic dy = _rtn.rtnData; |
| | |
| | | gvList.Add(gvMx2); |
| | | gvList.Add(gvMx3); |
| | | UtilityHelper.SetValueByObj(this.layoutMx1.Controls, dy, isEdit, gvList); |
| | | |
| | | |
| | | JArray array3 = new JArray(); |
| | | foreach (var a in dy["list3"]) |
| | | { |
| | | array3.Add(a); |
| | | } |
| | | DataTable dt3 = JsonConvert.DeserializeObject<DataTable>(array3.ToString()); |
| | | if (dt3.Rows.Count > 0) |
| | | { |
| | | gcMx3.BindingContext = new BindingContext(); |
| | | gcMx3.DataSource = dt3; |
| | | gcMx3.ForceInitialize(); |
| | | gvMx3.BestFitColumns(); |
| | | Gs.DevApp.ToolBox.UtilityHelper.SetGridLayout(gvMx3); |
| | | } |
| | | else |
| | | { |
| | | Gs.DevApp.ToolBox.UtilityHelper.SetDefaultTable(gcMx3, gvMx3); |
| | | } |
| | | |
| | | |
| | | JArray array1 = new JArray(); |
| | | foreach (var a in dy["list1"]) |
| | | { |
| | |
| | | { |
| | | Gs.DevApp.ToolBox.UtilityHelper.SetDefaultTable(gcMx1, gvMx1); |
| | | } |
| | | |
| | | JArray array2 = new JArray(); |
| | | foreach (var a in dy["list2"]) |
| | | { |
| | |
| | | { |
| | | Gs.DevApp.ToolBox.UtilityHelper.SetDefaultTable(gcMx2, gvMx2); |
| | | } |
| | | JArray array3 = new JArray(); |
| | | foreach (var a in dy["list3"]) |
| | | { |
| | | array3.Add(a); |
| | | } |
| | | DataTable dt3 = JsonConvert.DeserializeObject<DataTable>(array3.ToString()); |
| | | if (dt3.Rows.Count > 0) |
| | | { |
| | | gcMx3.BindingContext = new BindingContext(); |
| | | gcMx3.DataSource = dt3; |
| | | gcMx3.ForceInitialize(); |
| | | gvMx3.BestFitColumns(); |
| | | Gs.DevApp.ToolBox.UtilityHelper.SetGridLayout(gvMx3); |
| | | } |
| | | else |
| | | { |
| | | Gs.DevApp.ToolBox.UtilityHelper.SetDefaultTable(gcMx3, gvMx3); |
| | | } |
| | | } |
| | | |
| | | } |
| | | |
| | | |
| | | else |
| | | ToolBox.MsgHelper.Warning("提示:" + _rtn.rtnMsg); |
| | | } |