【新增事件】单据体(移动列表)-上拉刷新、下拉真翻页,按页真实取数

一、概述:
本篇主要介绍单据体(移动列表)字段新增的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 = " FDat【新增事件】单据体(移动列表)-上拉刷新、下拉真翻页,按页真实取数
声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。



