实例介绍
【实例简介】1、先开发一张动态表单,放入树形控件和单据体
【核心代码】2、编写动态表单插件,示例代码如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Kingdee.BOS.Core.DynamicForm.PlugIn;
using Kingdee.BOS.Core.Base.PlugIn;
using Kingdee.BOS.Core.DynamicForm;
using Kingdee.BOS.Contracts.Report;
using Kingdee.BOS.Core.Bill.PlugIn;
using Kingdee.BOS.Core.Metadata;
using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;
using Kingdee.BOS.Core.DynamicForm.PlugIn.ControlModel;
using Kingdee.BOS.Util;
using Kingdee.BOS.Core.Metadata.FieldElement;
using Kingdee.BOS;
using Kingdee.BOS.Core.Metadata.ControlElement;
using Kingdee.BOS.Core.Metadata.EntityElement;
using System.ComponentModel;
using System.Dynamic;
using System.Data;
using Kingdee.BOS.ServiceHelper;
using Kingdee.BOS.App.Data;
using Kingdee.BOS.Core.Bill;
namespace TreeNodeTest
{
public class TreeNodeTest : AbstractDynamicFormPlugIn
{
/// <summary>
/// 元数据
/// </summary>
private BusinessInfo _currInfo = null;
/// <summary>
/// 界面布局
/// </summary>
private LayoutInfo _currLayout = null;
/// <summary>
/// 初始化界面元数据时触发此事件
/// </summary>
/// <param name="e"></param>
/// <remarks>
/// 通常在此事件中,修改界面元数据;
/// 本示例,在此事件中,把界面元数据复制到本地,避免与其他实例公用元数据,造成串账
/// </remarks>
public override void OnSetBusinessInfo(SetBusinessInfoArgs e)
{
// 复制界面元数据到本地变量
FormMetadata currMeta = (FormMetadata)ObjectUtils.CreateCopy(
this.View.OpenParameter.FormMetaData);
_currInfo = currMeta.BusinessInfo;
_currLayout = currMeta.GetLayoutInfo();
// 用本地的元数据,替换动态表单引擎持有的元数据
e.BusinessInfo = _currInfo;
e.BillBusinessInfo = _currInfo;
}
/// <summary>
/// 初始化界面元数据时触发此事件
/// </summary>
/// <param name="e"></param>
/// <remarks>
/// 通常在此事件中,修改界面元数据;
/// 本示例,在此事件中,把界面元数据复制到本地,避免与其他实例公用元数据,造成串账
/// </remarks>
public override void OnSetLayoutInfo(SetLayoutInfoArgs e)
{
e.LayoutInfo = _currLayout;
e.BillLayoutInfo = _currLayout;
}
private HashSet<string> _loadedNodeIds = new HashSet<string>();
private Dictionary<string, NodeInfo> _dctNodes = new Dictionary<string, NodeInfo>();
public override List<TreeNode> GetTreeViewData(TreeNodeArgs e)
{
if (e.Key.Equals("F_PAEZ_TREEVIEW") == false)
{
// 需加载是其他树控件的节点,略过
return new List<TreeNode>();
}
// 加载全部节点信息到内存
//this.LoadNodes();
queryNodeComparny(0);
// 记录已经加载过根节点
this._loadedNodeIds.Add("0");
// 展开树控件节点
TreeView tv = this.View.GetControl<TreeView>("F_PAEZ_TreeView");
tv.SetExpanded(true);
// 构造根目录下的第一层节点并返回
List<TreeNode> nodes = this.BuildTreeNodes("0");
return nodes;
}
public override void TreeNodeClick(TreeNodeArgs e)
{
if (e.Key.Equals("F_PAEZ_TREEVIEW") == false)
{
// 点击的是其他树控件,略过
return;
}
// 判断是否已经加载过此节点的子节点,如果加载过,则不再加载
if (!this._loadedNodeIds.Contains(e.NodeId))
{
//return;
this._loadedNodeIds.Add(e.NodeId);
TreeView tv = this.View.GetControl<TreeView>("F_PAEZ_TREEVIEW");
string parentId = e.NodeId;
if (parentId.StartsWith("more"))
{// 当前点击的节点,是"点击加载更多..."
string[] keys = parentId.Split('|');
parentId = keys[1]; // 第2部分为父节点部分
// "点击加载更多..."节点已经被点击过,不再需要了,移除之
tv.RemoveNode(e.NodeId);
}
// 开始加载更多的子节点
List<TreeNode> childNodes = this.BuildTreeNodes(parentId);
if (childNodes.Count > 0)
{
tv.AddNodes(parentId, childNodes);
}
}
SetEntityData(e.NodeId);
}
private List<TreeNode> BuildTreeNodes(string parentId)
{
_dctNodes.Clear();
queryNodeComparny(Convert.ToInt32(parentId));
List<TreeNode> nodes = new List<TreeNode>();
// 遍历全部节点,找指定节点中,未加载的子节点的子节点
int count = 0;
int index = 0;
foreach (var item in _dctNodes)
{
NodeInfo nodeInfo = item.Value;
if (nodeInfo.Loaded == false
&& nodeInfo.ParentId == parentId)
{
nodeInfo.Loaded = true;
count ;
TreeNode node = new TreeNode()
{
id = nodeInfo.Id,
text = nodeInfo.Caption,
parentid = nodeInfo.ParentId,
};
nodes.Add(node);
}
index ;
}
return nodes;
}
private void queryNodeComparny(int nodeId)
{
int fid;
int parentId;
string node;
string sql = "select a.FID,b.FNAME,a.FPARENTID from T_BD_MATERIALGROUP a left join T_BD_MATERIALGROUP_L b on a.FID = b.FID where a.FPARENTID = '" nodeId "' order by a.FPARENTID ";
DataSet ds = Kingdee.BOS.ServiceHelper.DBServiceHelper.ExecuteDataSet(this.Context,sql);
if (ds.Tables[0].Rows.Count > 0)
{
for (int i = 0; i < ds.Tables[0].Rows.Count; i )
{
fid = Convert.ToInt32(ds.Tables[0].Rows[i]["FID"].ToString());
parentId = Convert.ToInt32(ds.Tables[0].Rows[i]["FPARENTID"].ToString());
node = ds.Tables[0].Rows[i]["FNAME"].ToString();
_dctNodes.Add(fid.ToString(), new NodeInfo() { Id = fid.ToString(),ParentId = parentId.ToString(),Caption = node});
}
}
}
public void SetEntityData(string NodeId)
{
string Sql = "";
int FOriEntryCount = 0;
FOriEntryCount = this.View.Model.GetEntryRowCount("F_PAEZ_Entity");
if (FOriEntryCount > 0)
{
for (int i = FOriEntryCount - 1; i >= 0; i--)
{
this.View.Model.DeleteEntryRow("F_PAEZ_Entity", i);
}
}
Sql = "select a.FMATERIALID,a.FNUMBER,b.FNAME,b.FSPECIFICATION from T_BD_MATERIAL a left join T_BD_MATERIAL_L b on a.FMATERIALID = b.FMATERIALID ";
Sql = "where FMATERIALGROUP = '" NodeId "'";
DataSet ds = Kingdee.BOS.ServiceHelper.DBServiceHelper.ExecuteDataSet(this.Context,Sql);
if (ds.Tables[0].Rows.Count > 0)
{
for (int i = 0; i < ds.Tables[0].Rows.Count; i )
{
this.View.Model.CreateNewEntryRow("F_PAEZ_Entity");
this.View.Model.SetValue("FMATID", ds.Tables[0].Rows[i]["FMATERIALID"].ToString(), i);
this.View.Model.SetValue("FMATNO", ds.Tables[0].Rows[i]["FNUMBER"].ToString(), i);
this.View.Model.SetValue("FMATNAME", ds.Tables[0].Rows[i]["FNAME"].ToString(), i);
this.View.Model.SetValue("FMODEL", ds.Tables[0].Rows[i]["FSPECIFICATION"].ToString(), i);
}
this.View.SetEntityFocusRow("F_PAEZ_Entity", 0);
}
}
}
public class NodeInfo
{
/// <summary>
/// 本节点Id
/// </summary>
public string Id { get; set; }
/// <summary>
/// 父节点Id
/// </summary>
public string ParentId { get; set; }
/// <summary>
/// 本节点标题
/// </summary>
public string Caption { get; set; }
/// <summary>
/// 是否已经加载标志:默认为false,未加载到前端
/// </summary>
public bool Loaded { get; set; }
}
}
标签: K3Cloud
相关软件
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明
网友评论
我要评论