二开案例.表单插件.表格动态创建列

【应用场景】表格动态创建列。
【案例演示】创建动态表单,通过插件方式,给表格动态创建列,动态绑定数据。

【实现步骤】
<1>编写表单插件,代码如下。
using Kingdee.BOS.Core.DynamicForm.PlugIn;
using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;
using Kingdee.BOS.Core.DynamicForm.PlugIn.ControlModel;
using Kingdee.BOS.Core.Metadata;
using Kingdee.BOS.JSON;
using Kingdee.BOS.Util;
using System;
using System.ComponentModel;
namespace Jac.XkDemo.BOS.Business.PlugIn
{
/// <summary>
/// 【表单插件】表格动态创建列
/// </summary>
[Description("【表单插件】表格动态创建列"), HotUpdate]
public class CreateDynamicListFormPlugIn : AbstractDynamicFormPlugIn
{
#region var
/// <summary>
/// 单据体标识
/// </summary>
private const string entityKey = "F_Jac_Entity";
/// <summary>
/// 需要动态创建的列的列名
/// </summary>
private string[] fieldNames = { "编码", "名称", "备注" };
#endregion
#region event
/// <summary>
/// 动态创建表格列并绑定数据
/// </summary>
/// <param name="e"></param>
public override void AfterBindData(EventArgs e)
{
base.AfterBindData(e);
BindData();
}
/// <summary>
/// 主菜单点击事件
/// </summary>
/// <param name="e"></param>
public override void BarItemClick(BarItemClickEventArgs e)
{
base.BarItemClick(e);
if (e.BarItemKey.EqualsIgnoreCase("tbRefresh"))
{
BindData();
}
}
/// <summary>
/// 动态创建表格列并绑定数据
/// </summary>
private void BindData()
{
var columnNames = this.View.Model.GetValue("F_Jac_Text") as string;
if (!string.IsNullOrWhiteSpace(columnNames))
{
fieldNames = columnNames.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
}
else
{
fieldNames = new[] { "编码", "名称", "备注" };
}
var actionData = new JSONObject();
actionData["key"] = entityKey;
actionData["methodname"] = "CreateDyanmicList";
JSONArray coMeta = new JSONArray();
//添加需要创建的列
coMeta.Add(GetColumns());
coMeta.Add("");
actionData["args"] = coMeta;
this.View.AddAction("InvokeControlMethod", actionData, x =>
{
//单据体动态创建列之后通过回调方式为该单据体添加数据
var grid = this.View.GetControl<EntryGrid>(entityKey);
grid.SetData(GetEntityData());
});
}
/// <summary>
/// 生成动态列指令集
/// </summary>
/// <returns></returns>
private JSONObject GetColumns()
{
// 生成构建表格的指令集
var entityAppearance = this.View.LayoutInfo.GetEntityAppearance(entityKey);
var gridMeta = entityAppearance.CreateControl();
gridMeta.Put("primaryKey", ExtConst.GRID_INDEX_FIELD_KEY);
gridMeta.Put("indexKey", ExtConst.GRID_INDEX_FIELD_KEY);
gridMeta.Put("startRow", 0);
gridMeta.Put("pageSize", entityAppearance.PageRows);
//gridMeta.Put("editable", false);
// 生成列
var columns = (JSONArray)gridMeta["columns"];
for (var i = 0; i < fieldNames.Length; ++i)
{
var fieldName = fieldNames[i];
var col = new JSONObject();
var xtype = "textfield";
col.Put("xtype", xtype);
col.Put("colIndex", i + 2);
col.Put("dataIndex", fieldName);
col.Put("header", fieldName);
col.Put("width", "300");
col.Put("visible", true);
// 如果需要某列的单元格可编辑,必须设置该列的编辑控件属性
// col.Put("editor", CreateEditorControl(xtype));
columns.Add(col
二开案例.表单插件.表格动态创建列
声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。



