Files
lserp_cs_5.0/插件库/Lskj.MyControl/TreeGridControl/TreeGridControlEx.cs
T
2026-07-10 15:25:05 +08:00

293 lines
12 KiB
C#

/***********************
* 说明:树控件
* 创建人:姜棚
* 创建日期:
* 修改人:
* 修改日期:
* 修改备注:
* 版本:1.0.0.0
***********************/
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using DevExpress.XtraTreeList.Columns;
using DevExpress.XtraTreeList;
using DevExpress.XtraTreeList.Menu;
using DevExpress.Utils.Menu;
using DevExpress.XtraTreeList.Nodes;
namespace Lskj.MyControl.TreeGridControl
{
public partial class TreeGridControlEx : UserControl
{
/// <summary>
/// 树模型
/// </summary>
/// <value>The tree list object.</value>
public TreeList TreeListObj { get { return this.treeList1; } }
/// <summary>
/// 树双击
/// </summary>
public EventHandler TreeDoubleClick;
public TreeGridControlEx()
{
InitializeComponent();
}
/// <summary>
/// <para>说明:绑定树表</para>
/// <para>创建人:姜棚</para>
/// <para>创建日期:2018-08-20 </para>
/// <para>修改人:</para>
/// <para>修改日期:</para>
/// <para>修改备注:</para>
/// <para>版本:1.0</para>
/// </summary>
/// <param name="keyFieldName">节点</param>
/// <param name="parentFieldName">父节点</param>
public void BindTreeGridEx(string keyFieldName, string parentFieldName)
{
this.treeList1.KeyFieldName = keyFieldName;
this.treeList1.ParentFieldName = parentFieldName;
}
/// <summary>
/// <para>说明:设置列</para>
/// <para>创建人:姜棚</para>
/// <para>创建日期:2018-08-17 </para>
/// <para>修改人:</para>
/// <para>修改日期:</para>
/// <para>修改备注:</para>
/// <para>版本:1.0</para>
/// </summary>
/// <param name="table">The table.</param>
/// <param name="customColumKey">The custom colum key.</param>
/// <summary>
/// 设置树表格列
/// </summary>
/// <param name="dtFileds"></param>
public void SetTreeColumn(DataTable dtFileds, bool isEdit = false)
{
for (int i = 0; i < dtFileds.Rows.Count; i++)
{
DataRow row = dtFileds.Rows[i];
TreeListColumn gridColumn = new TreeListColumn();
gridColumn.FieldName = row["fieldname"] + "";
gridColumn.Name = row["fieldname"] + "";
gridColumn.VisibleIndex = i;
gridColumn.Caption = row["username1"] + "";
gridColumn.Width = Convert.ToInt32(row["width"]);
gridColumn.Visible = ((Convert.ToInt32(row["width"]) > 0));
gridColumn.OptionsFilter.FilterPopupMode = DevExpress.XtraTreeList.FilterPopupMode.CheckedList;
gridColumn.OptionsColumn.AllowEdit = isEdit;
MyTagModel mode = new MyTagModel() { DefaultValue = row["defaultdate"].ToString(), Tag = gridColumn.Tag, calcExpr = row["calcExpr"].ToString(), unionFields = row["unionFields"] + "", unionValue = row["unionValue"] + "", lookupSql = row["fieldsql"] + "", lookupKey = row["fieldsqlid"] + "", lookupValue = row["fieldsqlname"] + "", fieldTypeId = Convert.ToInt32(row["fieldsqlTag"]) };
gridColumn.Tag = mode;
string dataFormat = row["DataFormat"] + "";
Lskj.PubUtils.CommonUtils.DataFormat(gridColumn, row["DataFormat"] + "", 7); // 单据来源明细没有定义列类型,默认按照数字方式格式化
if (dtFileds.Columns.Contains("Accuracy"))
SetColumnFormat(dtFileds.Rows[i]["Accuracy"] + "", gridColumn);
bool isSum = dtFileds.Columns.Contains("isSum") && !String.IsNullOrEmpty(row["isSum"] + "") && Convert.ToInt32(row["isSum"]) == 1;
SetColumnSummary(gridColumn, isSum, dataFormat);
treeList1.Columns.AddRange(new DevExpress.XtraTreeList.Columns.TreeListColumn[] { gridColumn });
}
}
/// <summary>
/// <para>说明:设置列统计</para>
/// <para>创建人:姜棚</para>
/// <para>创建日期:2018-08-17 </para>
/// <para>修改人:</para>
/// <para>修改日期:</para>
/// <para>修改备注:</para>
/// <para>版本:1.0</para>
/// </summary>
public void SetColumnSummary(TreeListColumn gridColumn, bool isSum, string dataFormat)
{
if (gridColumn.VisibleIndex == 0)
{
this.treeList1.OptionsView.ShowSummaryFooter = true;
gridColumn.AllNodesSummary = true;
gridColumn.SummaryFooter = SummaryItemType.Count;
gridColumn.RowFooterSummaryStrFormat = "合计:{0:#,###}行";
}
else
{
if (isSum)
{
this.treeList1.OptionsView.ShowSummaryFooter = true;
gridColumn.RowFooterSummary = DevExpress.XtraTreeList.SummaryItemType.Sum;
gridColumn.AllNodesSummary = true;
gridColumn.SummaryFooter = DevExpress.XtraTreeList.SummaryItemType.Sum;
gridColumn.RowFooterSummaryStrFormat = "{0:" + dataFormat + "}";
}
}
}
/// <summary>
/// <para>说明:设置列格式化</para>
/// <para>创建人:姜棚</para>
/// <para>创建日期:2018-08-17 </para>
/// <para>修改人:</para>
/// <para>修改日期:</para>
/// <para>修改备注:</para>
/// <para>版本:1.0</para>
/// </summary>
public void SetColumnFormat(string accuracy, TreeListColumn gridColumn)
{
if (!string.IsNullOrEmpty(accuracy) && accuracy != "0")
{
gridColumn.Format.FormatType = DevExpress.Utils.FormatType.Numeric;
gridColumn.Format.FormatString = "F2";
}
}
/// <summary>
/// <para>说明:设置数据源</para>
/// <para>创建人:姜棚</para>
/// <para>创建日期:2018-08-17 </para>
/// <para>修改人:</para>
/// <para>修改日期:</para>
/// <para>修改备注:</para>
/// <para>版本:1.0</para>
/// </summary>
public void SetDataSource(DataTable dtSource)
{
this.treeList1.DataSource = dtSource;
}
/// <summary>
/// <para>说明:添加树节点</para>
/// <para>创建人:姜棚</para>
/// <para>创建日期:2018-08-17 </para>
/// <para>修改人:</para>
/// <para>修改日期:</para>
/// <para>修改备注:</para>
/// <para>版本:1.0</para>
/// </summary>
public TreeListNode AddTreeNode(bool lowerNode)
{
TreeListNode selectNode = this.treeList1.FocusedNode;
if (!lowerNode && selectNode != null) selectNode = selectNode.ParentNode;
return this.treeList1.AppendNode(null, selectNode);
}
/// <summary>
/// <para>说明:刷新树节点(以先前展开状态进行刷新)</para>
/// <para>创建人:姜棚</para>
/// <para>创建日期:2018-08-21 </para>
/// <para>修改人:</para>
/// <para>修改日期:</para>
/// <para>修改备注:</para>
/// <para>版本:1.0</para>
/// </summary>
public void RefreshTreeNode(List<TreeListNode> treeNodes, TreeListNode focusNode)
{
foreach (TreeListNode node in treeNodes)
{
TreeListNode selectNode = this.treeList1.FindNodeByID(node.Id);
if (selectNode != null)
selectNode.Expanded = true;
}
if (focusNode != null)
{
//由于绑定数据源变了,要在现在树中找到原来记录的节点
focusNode = this.treeList1.FindNodeByID(focusNode.Id);
this.treeList1.FocusedNode = focusNode;
}
}
/// <summary>
/// <para>说明:拖动节点前</para>
/// <para>创建人:姜棚</para>
/// <para>创建日期:2018-08-17 </para>
/// <para>修改人:</para>
/// <para>修改日期:</para>
/// <para>修改备注:</para>
/// <para>版本:1.0</para>
/// </summary>
/// <param name="sender">The sender.</param>
/// <param name="e">The <see cref="DevExpress.XtraTreeList.BeforeDragNodeEventArgs"/> instance containing the event data.</param>
private void OnBeforeDragNode(object sender, DevExpress.XtraTreeList.BeforeDragNodeEventArgs e)
{
// 根据存储过程进行验证是否可拖动
//禁止拖动
//e.CanDrag = false;
}
/// <summary>
/// <para>说明:拖动节点后</para>
/// <para>创建人:姜棚</para>
/// <para>创建日期:2018-08-17 </para>
/// <para>修改人:</para>
/// <para>修改日期:</para>
/// <para>修改备注:</para>
/// <para>版本:1.0</para>
/// </summary>
/// <param name="sender">The sender.</param>
/// <param name="e">The <see cref="DevExpress.XtraTreeList.NodeEventArgs"/> instance containing the event data.</param>
private void OnAfterDragNode(object sender, DevExpress.XtraTreeList.NodeEventArgs e)
{
//存储过程验证
}
/// <summary>
/// <para>说明:获取选中行数据</para>
/// <para>创建人:姜棚</para>
/// <para>创建日期:2018-08-17 </para>
/// <para>修改人:</para>
/// <para>修改日期:</para>
/// <para>修改备注:</para>
/// <para>版本:1.0</para>
/// </summary>
/// <param name="node">The node.</param>
/// <returns>DataRow.</returns>
private DataRow GetForcedNodeDataRow(TreeListNode node)
{
DataRowView dataRowView = this.treeList1.GetDataRecordByNode(node) as DataRowView;
return dataRowView != null ? dataRowView.Row : null;
}
/// <summary>
/// <para>说明:双击树表</para>
/// <para>创建人:姜棚</para>
/// <para>创建日期:2018-08-20 </para>
/// <para>修改人:</para>
/// <para>修改日期:</para>
/// <para>修改备注:</para>
/// <para>版本:1.0</para>
/// </summary>
/// <param name="sender">The sender.</param>
/// <param name="e">The <see cref="EventArgs"/> instance containing the event data.</param>
private void OnDoubleClick(object sender, EventArgs e)
{
if (TreeDoubleClick != null)
TreeDoubleClick(this.treeList1.FocusedNode, null);
}
/// <summary>
/// <para>说明:打开查找控件</para>
/// <para>创建人:姜棚</para>
/// <para>创建日期:2018-08-23 </para>
/// <para>修改人:</para>
/// <para>修改日期:</para>
/// <para>修改备注:</para>
/// <para>版本:1.0</para>
/// </summary>
/// <param name="msg">通过引用传递的 <see cref="T:System.Windows.Forms.Message" />,它表示要处理的窗口消息。</param>
/// <param name="keyData"><see cref="T:System.Windows.Forms.Keys" /> 值之一,它表示要处理的键。</param>
/// <returns>如果字符已由控件处理,则为 true;否则为 false。</returns>
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
switch (keyData)
{
//ctrl键按下
case Keys.Control | Keys.F:
this.treeList1.ShowFindPanel();
break;
}
return false;
}
}
}