/***********************
* 说明:树控件
* 创建人:姜棚
* 创建日期:
* 修改人:
* 修改日期:
* 修改备注:
* 版本: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
{
///
/// 树模型
///
/// The tree list object.
public TreeList TreeListObj { get { return this.treeList1; } }
///
/// 树双击
///
public EventHandler TreeDoubleClick;
public TreeGridControlEx()
{
InitializeComponent();
}
///
/// 说明:绑定树表
/// 创建人:姜棚
/// 创建日期:2018-08-20
/// 修改人:
/// 修改日期:
/// 修改备注:
/// 版本:1.0
///
/// 节点
/// 父节点
public void BindTreeGridEx(string keyFieldName, string parentFieldName)
{
this.treeList1.KeyFieldName = keyFieldName;
this.treeList1.ParentFieldName = parentFieldName;
}
///
/// 说明:设置列
/// 创建人:姜棚
/// 创建日期:2018-08-17
/// 修改人:
/// 修改日期:
/// 修改备注:
/// 版本:1.0
///
/// The table.
/// The custom colum key.
///
/// 设置树表格列
///
///
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 });
}
}
///
/// 说明:设置列统计
/// 创建人:姜棚
/// 创建日期:2018-08-17
/// 修改人:
/// 修改日期:
/// 修改备注:
/// 版本:1.0
///
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 + "}";
}
}
}
///
/// 说明:设置列格式化
/// 创建人:姜棚
/// 创建日期:2018-08-17
/// 修改人:
/// 修改日期:
/// 修改备注:
/// 版本:1.0
///
public void SetColumnFormat(string accuracy, TreeListColumn gridColumn)
{
if (!string.IsNullOrEmpty(accuracy) && accuracy != "0")
{
gridColumn.Format.FormatType = DevExpress.Utils.FormatType.Numeric;
gridColumn.Format.FormatString = "F2";
}
}
///
/// 说明:设置数据源
/// 创建人:姜棚
/// 创建日期:2018-08-17
/// 修改人:
/// 修改日期:
/// 修改备注:
/// 版本:1.0
///
public void SetDataSource(DataTable dtSource)
{
this.treeList1.DataSource = dtSource;
}
///
/// 说明:添加树节点
/// 创建人:姜棚
/// 创建日期:2018-08-17
/// 修改人:
/// 修改日期:
/// 修改备注:
/// 版本:1.0
///
public TreeListNode AddTreeNode(bool lowerNode)
{
TreeListNode selectNode = this.treeList1.FocusedNode;
if (!lowerNode && selectNode != null) selectNode = selectNode.ParentNode;
return this.treeList1.AppendNode(null, selectNode);
}
///
/// 说明:刷新树节点(以先前展开状态进行刷新)
/// 创建人:姜棚
/// 创建日期:2018-08-21
/// 修改人:
/// 修改日期:
/// 修改备注:
/// 版本:1.0
///
public void RefreshTreeNode(List 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;
}
}
///
/// 说明:拖动节点前
/// 创建人:姜棚
/// 创建日期:2018-08-17
/// 修改人:
/// 修改日期:
/// 修改备注:
/// 版本:1.0
///
/// The sender.
/// The instance containing the event data.
private void OnBeforeDragNode(object sender, DevExpress.XtraTreeList.BeforeDragNodeEventArgs e)
{
// 根据存储过程进行验证是否可拖动
//禁止拖动
//e.CanDrag = false;
}
///
/// 说明:拖动节点后
/// 创建人:姜棚
/// 创建日期:2018-08-17
/// 修改人:
/// 修改日期:
/// 修改备注:
/// 版本:1.0
///
/// The sender.
/// The instance containing the event data.
private void OnAfterDragNode(object sender, DevExpress.XtraTreeList.NodeEventArgs e)
{
//存储过程验证
}
///
/// 说明:获取选中行数据
/// 创建人:姜棚
/// 创建日期:2018-08-17
/// 修改人:
/// 修改日期:
/// 修改备注:
/// 版本:1.0
///
/// The node.
/// DataRow.
private DataRow GetForcedNodeDataRow(TreeListNode node)
{
DataRowView dataRowView = this.treeList1.GetDataRecordByNode(node) as DataRowView;
return dataRowView != null ? dataRowView.Row : null;
}
///
/// 说明:双击树表
/// 创建人:姜棚
/// 创建日期:2018-08-20
/// 修改人:
/// 修改日期:
/// 修改备注:
/// 版本:1.0
///
/// The sender.
/// The instance containing the event data.
private void OnDoubleClick(object sender, EventArgs e)
{
if (TreeDoubleClick != null)
TreeDoubleClick(this.treeList1.FocusedNode, null);
}
///
/// 说明:打开查找控件
/// 创建人:姜棚
/// 创建日期:2018-08-23
/// 修改人:
/// 修改日期:
/// 修改备注:
/// 版本:1.0
///
/// 通过引用传递的 ,它表示要处理的窗口消息。
/// 值之一,它表示要处理的键。
/// 如果字符已由控件处理,则为 true;否则为 false。
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
switch (keyData)
{
//ctrl键按下
case Keys.Control | Keys.F:
this.treeList1.ShowFindPanel();
break;
}
return false;
}
}
}