二开案例.下拉列表.动态填充下拉选项

【应用场景】某个字段发生值变化时,动态填充下拉列表字段的下拉选项。
【案例演示】采购订单,新增一个下拉列表字段,给该字段定义枚举类型为【等级】,枚举项为【A、B、C、D、E、F】,切换单据类型后,依据不同的单据类型,给该下拉列表字段填充不同的等级。

【实现步骤】
<1>采购订单,新增一个下拉列表字段,添加枚举类型定义【等级】,添加枚举项。

<2>编写单据插件,实现动态填充下拉列表字段的下拉选项的功能,代码如下。
using Kingdee.BOS.Core.Bill.PlugIn;
using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;
using Kingdee.BOS.Core.DynamicForm.PlugIn.ControlModel;
using Kingdee.BOS.Core.Metadata;
using Kingdee.BOS.Core.Metadata.FieldElement;
using Kingdee.BOS.Orm.DataEntity;
using Kingdee.BOS.Util;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
namespace Jac.XkDemo.BOS.Business.PlugIn
{
/// <summary>
/// 【单据插件】填充下拉列表演示
/// </summary>
[Description("【单据插件】填充下拉列表演示"), HotUpdate]
public class FillComboFieldPlugIn : AbstractBillPlugIn
{
public override void DataChanged(DataChangedEventArgs e)
{
base.DataChanged(e);
if (e.Field.Key == "FBillTypeID")
{
// 如果是使用单据类型触发下拉列表的填充动作时,此事件不需要执行,此DataChanged事件的代码可整段注释掉,因为单据类型切换会引发整个页面的重新加载,需要在AfterBindData事件中填充下拉列表
// 如果是使用非单据类型字段触发下拉列表的填充动作时,此事件需要执行,AfterBindData事件中不需要执行,对应代码块可以注释掉。
BindComboField();
}
}
public override void AfterBindData(EventArgs e)
{
base.AfterBindData(e);
BindComboField();
}
private void BindComboField()
{
// 获取元数据中设计的等级的枚举项集合
var levelEnumObjects = (DynamicObjectCollection)((ComboField)this.View.BillBusinessInfo.GetField("F_PAEZ_Combo")).EnumObject["Items"];
var enumList = new List<EnumItem>();
// 获取单据类型的内码
var billTypeId = string.Empty;
var billTypeObj = this.Model.GetValue("FBillTypeID") as DynamicObject;
if (billTypeObj != null)
{
billTypeId = billTypeObj[0].ToString();
}
if (billTy
二开案例.下拉列表.动态填充下拉选项
声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。



