【新增事件】单据体(移动列表)-上拉刷新、下拉真翻页,按页真实取数
一、概述:
本篇主要介绍单据体(移动列表)字段新增的2个事件:
1. OnEntityRefresh 下拉刷新事件。
2. OnEntityPageChange 上拉翻页事件。
3. 格式化当前页数据
用于解决单据体字段一次加载所有数据,效率低下,无法干预翻页的问题,新的OnEntityPageChange 上拉翻页事件支持按页获取数据,格式化数据
二、适用版本:
适用于V 7.6(PT-146867)及以上,移动运行时新框架xmobile版
三、详细介绍:
3.1. OnEntityRefresh 下拉刷新事件:
注:此事件默认取缓存数据,如需要重新从数据库中取数据时,可以重写此事件插件干预。
此示例下拉刷新时,重新从数据库取数据。
/// <summary> /// 下拉刷新, 如不需要从数据库中重新取数,不需要此事件 /// </summary> /// <param name="e"></param> public override void OnEntityRefresh(EntityRefreshEventArgs e) { if (e.Key == C_MAINENTITY_KEY) { GetEntityData(0, e.Limit, true); } }
3.2. OnEntityPageChange 上拉翻页事件:
/// <summary> /// 上拉翻页,取当前页数据 /// 如需格式化,只需格式化当前页数据即可 /// </summary> /// <param name="e"></param> public override void OnEntityPageChange(PageChangeEventArgs e) { if (e.Key == C_MAINENTITY_KEY) { GetEntityData(e.Start, e.Limit, false); } }
3.3. 格式化当前页数据:
格式化的原则:
a. 每行格式化相同,直接对此字段或控件设置值或属性,如 this.View.GetControl("F_MOB_FlowLayout").SetCustomPropertyValue("backcolor","yellow")
b. 按需格式化,那行需要格式化那行,尽量减少格式化行数,缩小范围,避免没必要的格式化:this.View.GetControl<MobileListViewControl>(C_MAINENTITY_KEY).setFormat
示例:
1. 采用移动表单,用单据体字段制作一个移动列表(数据源:销售订单)
2. 上拉刷新实时取数,下拉每次加载当前页数据
3. 按当前页数据格式化
情况1: 格式化每一行同控件或字段相同属性,如:设置每行分割线(F_MOB_FlowLayout)背景为灰色
情况2: 格式化某一行同控件或字段相同属性,如:设置第一行分割线(F_MOB_FlowLayout)背景色为红色
情况3: 格式化当前分页每一行同一控件或字段不同属性,如:通过格式化给每行设置序号(F_LAB_NUM)
BOSIDE设计时如下:
运行是效果图如下:
完整代码:
using Kingdee.BOS; using Kingdee.BOS.Core.Metadata; using Kingdee.BOS.Core.SqlBuilder; using Kingdee.BOS.Mobile.Metadata; using Kingdee.BOS.Mobile.PlugIn; using Kingdee.BOS.Mobile.PlugIn.Args; using Kingdee.BOS.Mobile.PlugIn.ControlModel; using Kingdee.BOS.Orm.DataEntity; using Kingdee.BOS.ServiceHelper; using Kingdee.BOS.Util; using System.Collections.Generic; namespace BOS.Demo.MobilePlugIn { /// <summary> /// 表单标识:MOB_MForm_EntityPageChage /// 移动表单继承:AbstractMobilePlugin, 移动单据继承:AbstractMobileBillPlugin, 移动单据列表继承:AbstractMobileListPlugin /// </summary> [System.ComponentModel.Description("移动表单插件 - 单据体下拉刷新重取数、上拉真翻页")] public class MForm_EntityPageChage : AbstractMobilePlugin { private const string C_MAINENTITY_KEY = "F_PAEZ_MOBILELISTVIEWENTITY"; public override void AfterBindData(System.EventArgs e) { int pageSize=this.View.GetControl<MobileListViewControl>(C_MAINENTITY_KEY).GetPageSize(); GetEntityData(0, pageSize, true); } /// <summary> /// 下拉刷新, 如不需要从数据库中重新取数,不需要此事件 /// </summary> /// <param name="e"></param> public override void OnEntityRefresh(EntityRefreshEventArgs e) { if (e.Key == C_MAINENTITY_KEY) { GetEntityData(0, e.Limit, true); } } /// <summary> /// 上拉翻页,取当前页数据 /// 如需格式化,只需格式化当前页数据即可 /// </summary> /// <param name="e"></param> public override void OnEntityPageChange(PageChangeEventArgs e) { if (e.Key == C_MAINENTITY_KEY) { GetEntityData(e.Start, e.Limit, false); } } /// <summary> /// 分页取数据 /// </summary> /// <param name="start"></param> /// <param name="limit"></param> /// <param name="isRefresh"></param> private void GetEntityData(int start, int limit, bool isRefresh) { if (isRefresh) { //下拉刷新,重新从数据库取数据,删除已有Model数据 start = 0; this.View.Model.DeleteEntryData(C_MAINENTITY_KEY); this.View.Model.DeleteEntryRow(C_MAINENTITY_KEY,0);//删除默认行 } //获取来源单据的数据集合 QueryBuilderParemeter queryParameter = new QueryBuilderParemeter(); queryParameter.RequiresDataPermission = true; queryParameter.FormId = "SAL_SaleOrder"; queryParameter.SelectItems = SelectorItemInfo.CreateItems("FID,FBillNo,FCustId,FDate"); queryParameter.FilterClauseWihtKey = queryParameter.FilterClauseWihtKey.JoinFilterString(" FCREATORID=@spCreatorId ", "AND");//XSDD000362 queryParameter.SqlParams.Add(new SqlParam("@spCreatorId", KDDbType.String, this.Context.UserId)); queryParameter.OrderByClauseWihtKey = " FDate Desc "; queryParameter.StartRow = start; queryParameter.Limit = limit; queryParameter.TopRowCount = 0; DynamicObjectCollection sourceBillCollect = QueryServiceHelper.GetDynamicObjectCollection(this.Context, queryParameter); //填充当前移动单据体 var entity = this.View.BusinessInfo.GetEntity(C_MAINENTITY_KEY); DynamicObjectCollection currCollect = this.View.Model.GetEntityDataObject(entity); for (int i = 0; i < sourceBillCollect.Count; i++) { int rowIndex = this.View.Model.GetEntryRowCount(C_MAINENTITY_KEY); this.View.Model.CreateNewEntryRow(C_MAINENTITY_KEY); currCollect[rowIndex]["id"] = sourceBillCollect[i]["FID"]; this.View.Model.SetItemValueByID("F_PAEZ_CUSTNAME", sourceBillCollect[i]["FCustId"], rowIndex); this.View.Model.SetValue("F_PAEZ_FORDERNUM", sourceBillCollect[i]["FBillNo"], rowIndex); this.View.Model.SetValue("F_PAEZ_FCREATEDATE", sourceBillCollect[i]["FDate"], rowIndex); } //刷新 if (isRefresh) { this.View.UpdateView(C_MAINENTITY_KEY); } //格式化 this.FormatData(start, sourceBillCollect.Count); } /// <summary> /// 格式化 /// </summary> /// <param name="start"></param> /// <param name="currPageCount"></param> private void FormatData(int start,int currPageCount) { //格式化的原则: //a.每行格式化相同,直接对此字段或控件设置值或属性,如 this.View.GetControl("F_MOB_FlowLayout").SetCustomPropertyValue("backcolor","yellow") //b 按需格式化,用this.View.GetControl<MobileListViewControl>(C_MAINENTITY_KEY).setFormat, //情况1. 格式化所有行,每行都相同( F_MOB_FlowLayout 背景为灰色) this.View.GetControl("F_MOB_FlowLayout").SetCustomPropertyValue("backcolor", "#c1c1ca"); //情况2. 格式化第一行F_MOB_FlowLayout背景色 为红色 List<MobileFormatCondition> formatCondition = new List<MobileFormatCondition>(); formatCondition.Add(new MobileFormatCondition() { Key = "F_MOB_FlowLayout", BackColor = "red", Row = 1 }); this.View.GetControl<MobileListViewControl>(C_MAINENTITY_KEY).setFormat(formatCondition); //情况3.格式化当前分页的所有数据(前提是每行都不同),尽量减少格式化每一行,缩小范围 //这里以设置每行序号为例 formatCondition = new List<MobileFormatCondition>(); int end = start + currPageCount; for (var i = start; i < end; i++) { var r = i + 1; formatCondition.Add(new MobileFormatCondition() { Key = "F_LAB_NUM", Value = r.ToString(), Row =r }); } this.View.GetControl<MobileListViewControl>(C_MAINENTITY_KEY).setFormat(formatCondition); } } }
【新增事件】单据体(移动列表)-上拉刷新、下拉真翻页,按页真实取数
本文2024-09-23 04:15:35发表“云星空知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-k3cloud-164156.html