UI插件 GridCellValueChanged

        public override void AfterInit(IPart Part, EventArgs args)
        {
            base.AfterInit(Part, args);
            _part = Part as UFIDA.U9.SCM.SM.SOUIModel.StandardSOMainUIFormWebPart;
            if (Part == null)
                return;
            //RegisterGridCellDataChangedCallBack();
            //DataChangedCallBack();
            CustoemrDataGridCellValueChangedPostback();
        }
        private void CustoemrDataGridCellValueChangedPostback()
        {
            UFWebDataGridAdapter dgLine = (UFWebDataGridAdapter)((System.Web.UI.Control)_part).FindControl("DataGrid4");
            //公式设置事件
            AssociationControl assocControl = new AssociationControl();
            assocControl.SourceServerControl = dgLine;
            assocControl.SourceControl.EventName = "OnCellDataValueChanged";
            ((IUFClientAssoGrid)assocControl.SourceControl).FireEventCols.Add("ItemInfo_ItemID");
            CodeBlock cb = new CodeBlock();
            UFWebClientGridAdapter gridAdapter = new UFWebClientGridAdapter(dgLine);
            gridAdapter.IsPostBack = true;
            gridAdapter.PostBackTag = "OnCellDataValueChanged";
            cb.TargetControls.addControl(gridAdapter);
            assocControl.addBlock(cb);
            UFGrid itemGrid = dgLine as UFGrid;
            itemGrid.GridCustomerPostBackEvent += new GridCustomerPostBackDelegate(CustomerOnChanged_DoCustomerAction_Grid);
        }
        private void CustomerOnChanged_DoCustomerAction_Grid(object sender, GridCustomerPostBackEventArgs e)
        {
            this._part.Model.ClearErrorMessage();
            if (e.SrcColumnName == "ItemInfo_ItemID")
            {
                if (this._part.Model.Views["SO_SOLines"].FocusedRecord != null)
                {
                    string fieldNameByIndex = GetFieldNameByIndex((IUFDataGrid)sender, e.ColIndex);
                    try
                    {
                        _part.IsDataBinding = true;
                        _part.IsConsuming = true;
                        _part.DataCollect();//数据收集
                        _part.DataBinding();//数据绑定
                        using (BPForEngine bp = new BPForEngine())
                        {
                            foreach (SO_SOLinesRecord rcd in _part.Model.SO_SOLines.Records)
                            {
                                ItemMaster itemMaster = ItemMaster.Finder.FindByID(rcd.ItemInfo_ItemID);
                                if (itemMaster != null)
                                    rcd.DescFlexField_PubDescSeg8 = itemMaster.DescFlexField.PubDescSeg7;
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        _part.Model.ErrorMessage.Message = ex.ToString();
                    }
                }
            }
        }
        public static string GetFieldNameByIndex(IUFDataGrid dataGrid, int index)
        {
            return dataGrid.Columns[index].UIFieldID.Trim();
        }
        private void DataChangedCallBack()
        {
            IUFDataGrid iufdataGrid = (UFWebDataGridAdapter)_part.FindControl("DataGrid4");
            AssociationControl gridCellDataChangedASC = new AssociationControl();       //基本固定代码
            gridCellDataChangedASC.SourceServerControl = iufdataGrid;
            gridCellDataChangedASC.SourceControl.EventName = "OnCellDataValueChanged";//注册行的单元格改变事件
            //CallBack处理方案
            ((IUFClientAssoGrid)gridCellDataChangedASC.SourceControl).FireEventCols.Add("ItemInfo_ItemID");//触发源,Item为触发控件名称
            ClientCallBackFrm gridCellDataChangedCBF = new ClientCallBackFrm();
            gridCellDataChangedCBF.ParameterControls.Add(iufdataGrid);

            gridCellDataChangedCBF.DoCustomerAction += new ClientCallBackFrm.ActionCustomer(gridCellDataChangedCBF_DoCustomerActionOfSubvillage);
            gridCellDataChangedCBF.Add(gridCellDataChangedASC);
            _part.Controls.Add(gridCellDataChangedCBF);
        }

        /// <summary>
                /// 表格的CallBack处理方式
                /// </summary>
                /// <param name="args"></param>
                /// <returns></returns>
        private object gridCellDataChangedCBF_DoCustomerActionOfSubvillage(CustomerActionEventArgs args)
        {
            IUFDataGrid dataGrid = (IUFDataGrid)_part.GetUFControlByName(_part.TopLevelContainer, "DataGrid4");
            UFWebClientGridAdapter grid = new UFWebClientGridAdapter(dataGrid);//行的DataGrid控件
            //取表格数据(当前行)
            ArrayList list = (ArrayList)args.ArgsHash[UFWebClientGridAdapter.ALL_GRIDDATA_SelectedRows]; //基本固定代码
            int curIndex = int.Parse(list[0].ToString());
            Hashtable table = (Hashtable)((ArrayList)args.ArgsHash[grid.ClientID])[curIndex];
            long ItemID = long.Parse(table["ItemInfo_ItemID"].ToString());//获取触发源字段值
            if (ItemID > 0)
            {
                string PubDescSeg8 = "12";
                grid.CellValue.Add(new object[] { curIndex, "OrderByQtyTU", new string[] { PubDescSeg8, PubDescSeg8, PubDescSeg8 } });//UnitPrice为要更新的字段名称,如果要更新多个字段值,需要些多个Add。后面三个参数,如果为参照的话分别对应ID,Code,Name
                args.ArgsResult.Add(grid.ClientInstanceWithValue);//DescFlexField_PubDescSeg8

            }
            return args;
        }
View Code

 

posted @ 2026-03-11 09:29  江境纣州  阅读(22)  评论(0)    收藏  举报