WinForms笔记——TreeList

1 数据源

个人常用DataTable对象作为数据源。

//新建数据源
DataTable dataTable = new DataTable();
//添加数据列
dataTable.Columns.Add("keyId");
dataTable.Columns.Add("parentId");
dataTable.Columns.Add("name");
dataTable.Columns.Add("age", typeof(double));
dataTable.Columns.Add("cellphone");
dataTable.Columns.Add("information");
dataTable.Columns["name"].Caption = "名称";
dataTable.Columns["age"].Caption = "年龄";
dataTable.Columns["cellphone"].Caption = "手机号";
dataTable.Columns["information"].Caption = "信息";
//添加数据行
dataTable.Rows.Add(1, 0, "A区");
dataTable.Rows.Add(11, 1, "a", 18);
dataTable.Rows.Add(12, 1, "b", 20);
dataTable.Rows.Add(2, 0, "B区");
dataTable.Rows.Add(21, 2, "a", 23);
dataTable.Rows.Add(22, 2, "b", 25);
dataTable.Rows.Add(23, 2, "c", 24);
//绑定数据源
treeList.DataSource = dataTable;
//keyId表示节点本身的id
treeList.KeyFieldName = "keyId";
//parentId表示父节点的id
treeList.ParentFieldName = "parentId";

2 TreeListColumn属性

个人常用属性如下。其他可通过VS-"Run Designer"查看。

//设置名称列不可编辑
treeList.Columns["name"].OptionsColumn.AllowEdit = false;
//设置名称列只读
treeList.Columns["name"].OptionsColumn.ReadOnly = true;
//设置列编辑器
treeList.Columns["age"].ColumnEdit = new RepositoryItemSpinEdit();
//隐藏手机号列,此时AbsoluteIndex仍存在
treeList.Columns["cellphone"].Visible = false;
//设置显示顺序VisualIndex,此时AbsoluteIndex不变
treeList1.Columns["information"].VisibleIndex = 2;

Run Designer

3 TreeList属性

个人常用属性如下。其他可在VS属性栏查看。

//显示复选框
this.treeList.OptionsView.ShowCheckBoxes = true;
//递归选择节点
this.treeList.OptionsBehavior.AllowRecursiveNodeChecking = true;
//禁止拖动列
this.treeList.OptionsCustomization.AllowColumnMoving = false;

TreeList属性

4 事件

个人常用事件如下。其他可在VS属性栏查看。
注意:不要在ValidatingEditor事件给其他节点设值,否则当前节点值会莫名清空!

//定义节点外观样式,且是动态的,每次编辑节点后都会重设样式
private void treeList_CustomDrawNodeCell(object sender, DevExpress.XtraTreeList.CustomDrawNodeCellEventArgs e)
{
	List<string> strs = new List<string>() { "a", "b" };
	//定义a、b的样式
	if (strs.Contains(e.Node.GetValue("name").ToString()))
	{
		e.Appearance.ForeColor = Color.Tomato;
		e.Appearance.BackColor = Color.WhiteSmoke;
	}
}

//数据验证
private void treeList_ValidatingEditor(object sender, DevExpress.XtraEditors.Controls.BaseContainerValidateEditorEventArgs e)
{
	if (string.IsNullOrWhiteSpace(e.Value as string))
	{
		e.Valid = true;
		e.Value = DBNull.Value;
	}
	
	//**注意:不要在本事件给其他节点设值,否则当前节点值会莫名清空**
	//treeList.Nodes[0].SetValue("age", 22);
}

//节点值修改后,立即同步到选中的叶节点
private void treeList_CellValueChanged(object sender, DevExpress.XtraTreeList.CellValueChangedEventArgs e)
{
	setCheckedLeafNodesValue(e.Node, e.Column, e.Value);
}

private void setCheckedLeafNodesValue(TreeListNode node, TreeListColumn column, object NewValue)
{
	//如果该节点未选中,跳过不处理
	if (node.CheckState == CheckState.Unchecked)
		return;
				
	//如果该节点是叶节点(无子节点),设置阈值
	if (node.Nodes.Count == 0)
	{
		node.SetValue(column, NewValue);
		return;
	}
	
	//如果该节点选中或部分选中,且有子节点
	//遍历子节点,递归调用方法
	foreach (TreeListNode childNode in node.Nodes)
	{
		setCheckedLeafNodesValue(childNode, column, NewValue);
	}
}

5 方法

个人常用方法如下。

//自动调整列宽
treeList.BestFitColumns();
//聚焦到指定节点
//FindNodeByID中的id,一般是添加节点时的顺序号,且增删节点后会自动更新序号
treeList.SetFocusedNode(treeList.FindNodeByID(0));
//找到节点对应的DataRow
DataRow dataRow = (treeList.GetDataRecordByNode(treeList.FindNodeByKeyID("11")) as DataRowView).Row;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值