DevApp/Gs.DevApp/UserControl/SelectCgMx.cs
@@ -8,36 +8,71 @@
namespace Gs.DevApp.UserControl
{
    // 继承自XtraForm,这是DevExpress提供的增强型表单控件
    public partial class SelectCgMx : XtraForm
    {
        // Web服务名称常量,用于调用后端接口
        private readonly string _webServiceName = "MesInvItemArnManager/";
        // 供应商ID和收料组织ID的私有变量
        private string suppId = "";
        private string receiveOrgId = "";
        /// <summary>
        ///
        /// 构造函数
        /// </summary>
        /// <param name="_suppId">供应商</param>
        /// <param name="_receiveOrgId">收料组织</param>
        /// <param name="_isWw">是否委外</param>
        /// <param name="_suppId">供应商ID参数</param>
        /// <param name="_receiveOrgId">收料组织ID参数</param>
        public SelectCgMx(string _suppId, string _receiveOrgId)
        {
            // 初始化表单控件
            InitializeComponent();
            // 为GridView的列标题绘制事件添加处理方法,使用自定义绘制
            this.gridView1.CustomDrawColumnHeader += (s, e) => { Gs.DevApp.ToolBox.UtilityHelper.CustomDrawColumnHeader(s, e); };
            this.gridView1.MouseUp += (s, e) => { Gs.DevApp.ToolBox.UtilityHelper.CustomMouseUp(s, e, gcMain, gridView1); };
            // 为GridView的鼠标抬起事件添加处理方法,实现自定义交互
            this.gridView1.MouseUp += (s, e) => {
                Gs.DevApp.ToolBox.UtilityHelper.CustomMouseUp(s, e, gcMain, gridView1);
                // 全选/取消全选后立即更新汇总,缩短延迟时间
                System.Windows.Forms.Timer timer = new System.Windows.Forms.Timer();
                timer.Interval = 80; // 缩短延迟确保操作完成后立即刷新
                timer.Tick += (sender, args) =>
                {
                    timer.Stop();
                    timer.Dispose();
                    UtilityHelper.RefreshConditionalSummary(gridView1); // 使用新的刷新方法
                };
                timer.Start();
            };
            // 配置复选列的排序和筛选选项,禁用排序和筛选功能
            this.colChkInt.OptionsColumn.AllowSort = DevExpress.Utils.DefaultBoolean.False;
            this.colChkInt.OptionsFilter.AllowAutoFilter = false;
            this.colChkInt.OptionsFilter.AllowFilter = false;
            this.colChkInt.OptionsFilter.AllowInHeaderSearch = DevExpress.Utils.DefaultBoolean.False;
            // 设置单选按钮组默认选中第一项(采购类型)
            radioGroup1.SelectedIndex = 0;
            // 保存传入的供应商ID和收料组织ID
            this.suppId = _suppId;
            this.receiveOrgId = _receiveOrgId;
            // 设置GridView的参数配置
            Gs.DevApp.ToolBox.UtilityHelper.SetGridViewParameter(gridView1, null, null, null, "", null, null, false);
            // 加载第一页数据
            getPageList(1);
            // 为"确定"按钮添加点击事件处理
            btnIn.Click += (s, e) =>
            {
                // 提交编辑并更新当前行数据
                gridView1.PostEditor();
                gridView1.UpdateCurrentRow();
                // 收集选中行的GUID
                var list = new List<string>();
                DataTable dt = this.gcMain.DataSource as DataTable;
                {
@@ -45,55 +80,83 @@
                    {
                        string checkBox = dr["chkInt"].ToString();
                        string _guid = dr["guid"].ToString();
                        // 检查是否选中
                        if (Gs.DevApp.ToolBox.UtilityHelper.ToCheck(checkBox))
                        {
                            list.Add(_guid);
                        }
                    }
                }
                UpdateParent?.Invoke(this, new UpdateParentEventArgs { StringList = list }); Close();
                // 触发回调事件,传递选中的GUID列表,然后关闭表单
                UpdateParent?.Invoke(this, new UpdateParentEventArgs { StringList = list });
                Close();
            };
            // 为单选按钮组添加选中项变化事件,切换时重新加载数据
            radioGroup1.SelectedIndexChanged += (s, e) =>
            {
                getPageList(1);
            };
            /// <summary>
            /// 条件汇总:只对选中(打勾)的行进行汇总
            /// chkInt字段为true时才计算purchaseQty和wssl的合计
            /// 使用一键式方法,包含条件汇总+实时刷新功能
            /// </summary>
            UtilityHelper.SetupCompleteConditionalSummary(gridView1, "chkInt", true, new string[] { "purchaseQty", "wssl" });
        }
        /// <summary>
        ///     选择后的回调事件
        /// 选择后的回调事件,用于向父窗体传递选中的数据
        /// </summary>
        public event EventHandler<UpdateParentEventArgs> UpdateParent;
        /// <summary>
        /// 从服务器获取分页数据并绑定到GridView
        /// </summary>
        /// <param name="curPage">第几页</param>
        /// <param name="pageSize">每页几条</param>
        /// <param name="curPage">当前页码</param>
        private void getPageList(int curPage)
        {
            // 创建请求参数对象
            var _obj = new
            {
                currentPage = curPage,
                everyPageSize = 999999,
                sortName = "",
                keyWhere = "",
                inBusType = (radioGroup1.SelectedIndex + 1),//1是采购,2是委外
                inSupId = this.suppId,
                inReceiveOrgId = this.receiveOrgId,
                currentPage = curPage,          // 当前页码
                everyPageSize = 999999,         // 每页记录数(这里设置了一个很大的值,可能是为了获取所有数据)
                sortName = "",                  // 排序字段
                keyWhere = "",                  // 查询条件
                inBusType = (radioGroup1.SelectedIndex + 1), // 业务类型:1是采购,2是委外
                inSupId = this.suppId,          // 供应商ID
                inReceiveOrgId = this.receiveOrgId, // 收料组织ID
            };
            // 将参数对象序列化为JSON字符串
            var json = JsonConvert.SerializeObject(_obj);
            try
            {
                // 调用Web服务获取数据
                var strReturn = UtilityHelper.HttpPost("",
                    _webServiceName + "SelectForm", json);
                // 解析返回结果为DataTable
                var dd = UtilityHelper.ReturnToTablePage(strReturn);
                var dt = dd.rtnData.list;
                // 绑定数据到GridControl
                gcMain.BindingContext = new BindingContext();
                gcMain.DataSource = dt;
                gcMain.ForceInitialize();
                gridView1.BestFitColumns(); Gs.DevApp.ToolBox.UtilityHelper.SetGridLayout(gridView1);
                // 自动调整列宽并应用网格布局
                gridView1.BestFitColumns();
                Gs.DevApp.ToolBox.UtilityHelper.SetGridLayout(gridView1);
            }
            catch (Exception ex)
            {
                // 显示错误信息
                MsgHelper.Warning("提示:" + ex.Message);
            }
        }