列表中表头链接根据列值打开不同的画面

by RainBirda 2016.1.15 09:45
注:脚本执行有风险,对于客户正式环境请在研发指导下执行。根据需求,电商订单的已生单号链接需要判断已生单是出货单还是退回处理单,然后分别打开不同的画面,查找平台提供的代码,不能根据列表中某一列字段值判断打开不同的画面(或者没找到。。。),只能手动进行单号链接的处理。 步骤: 1、首先需要注册一下列表头点击事件; 2、设置具体哪一列能触发列表头的事件; 3、在事件中进行代码处理,这个事件应该可以判断是哪一列触发的,这里因为只有一列链接,所以也就没有再做判断。 具体代码如下: public void AfterCreateChildControls(){    AfterCreateChildControls_Qry_DefaultImpl();//BE列表自动产生的代码     //注册单号链接事件    ((UFWebDataGridAdapter)this.DataGrid1).GridHeadClicked += new GridHeadClicked(DataGridTitleClicked);} public void BeforeUIModelBinding(){    //设置显示单号链接    if (this.DataGrid1.Columns["FinishedDocNo"] != null)    {        this.DataGrid1.Columns["FinishedDocNo"].HasEvent = true;    }           } /// <summary>/// 设置单号链接/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void DataGridTitleClicked(object sender, GridHeadClickEventArgs e){    this.DataGrid1.CurrentPart.DataCollect();    this.DataGrid1.CurrentPart.IsDataBinding = true;    this.DataGrid1.CurrentPart.IsConsuming = false;     IUIView view = this.Action.CurrentModel.Views["ECO"];    IUIRecord record = view.FocusedRecord;     if (e.FieldID == "FinishedDocNo")    {        if (record != null)        {            string formID = string.Empty;            NameValueCollection param = new NameValueCollection();            param.Add("TargetOrganization", PlatformContext.Current.OrgID);            param.Add("ID", record["FinishedDocID"].ToString());            if (Convert.ToBoolean(record["IsReturn"]))            {                //退回处理                formID = "7dde4c9d-98a2-4bb1-bc42-bccd74e4e1ac";            }            else            {                //标准出货                formID = "824496cc-bb94-472c-950e-4adfaec2f2c6";                param.Add("SHIP_Type", "SM6010");            }            this.ShowModalDialog(formID, "", "992", "504", string.Empty, param, false);        }    } }

修改列表中的数据后,翻页如何保留已修改的数据?

by RainBirda 2015.7.14 10:30
现在知道的有两种方案: 1、每次翻页时将触发callback事件,将当前页的数据存到缓存中,每次翻页后从缓存中取出修改后的数据赋值到列表中,不过这种实现方式比较复杂,不利于维护; 2、还有一种就是每次修改列表中的数据时触发postback事件,在服务端进行一次数据收集,这种实现方式较简单,不过修改数据后页面有刷新的动作,反应慢一些。 我想应该有其他更好的方式,以上两种都有缺点,还请大家指点一下。 第二种方式实现方法: /// <summary> /// 在AfterCreateChildControls中注册转订单数量及存储地点改变时postback事件 /// </summary> private void OnToTransOutQtyChanged_PostBack() {     AssociationControl assoCtrl = new AssociationControl();     assoCtrl.SourceServerControl = this.DataGrid1;     assoCtrl.SourceControl.EventName = "OnCellDataChanged";     IUFClientAssoGrid assGrid = (IUFClientAssoGrid)assoCtrl.SourceControl;     assGrid.FireEventCols.Add("ToTransOutQtyTU");     assGrid.FireEventCols.Add("ToTransOutQtyTBU");     assGrid.FireEventCols.Add("TransOutWh");     assGrid.FireEventCols.Add("TransInWh");     assGrid.FireEventCols.Add("TransOutBusDate");       CodeBlock cb = new CodeBlock();     UFWebClientGridAdapter gridAdapter = new UFWebClientGridAdapter(this.DataGrid1);     gridAdapter.IsPostBack = true;     gridAdapter.PostBackTag = this.DataGrid1.ID + "_" + assoCtrl.SourceControl.EventName;     cb.TargetControls.addControl(gridAdapter);     assoCtrl.addBlock(cb);       UFGrid gird = this.DataGrid1 as UFGrid;     GridCustomerPostBackDelegate actionDelegate =         new GridCustomerPostBackDelegate(ToTransOutQtyChanged_CustomerPostBackAction);     gird.GridCustomerPostBackEvent += actionDelegate; }   /// <summary> ///  触发转订单数量及存储地点改变时触发postback方法 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void ToTransOutQtyChanged_CustomerPostBackAction(object sender, GridCustomerPostBackEventArgs e) {     if (e.PostTag.ToString().EndsWith("OnCellDataChanged"))     {         this.OnDataCollect(this); //当前事件先执行数据收集         this.IsDataBinding = true; //当前事件执行后会进行数据绑定         this.IsConsuming = false;     } }

RecentComments

评论 RSS

Statistics

989 篇文章
0 个单页
647860 条评论
11 次评分
241714 次访问
访问统计开始于 2019年12月15日
平均日访问 5493 次
当前 164 人在线