1、自定义一个表、并赋值
/// <summary>
/// 构造一棵树型表结构
/// </summary>
/// <returns></returns>
private DataTable CreateTreeListTable()
{
DataTable dt = new DataTable();
DataColumn dcOID = new DataColumn("KeyFieldName", Type.GetType("System.Int32"));
DataColumn dcParentOID = new DataColumn("ParentFieldName", Type.GetType("System.Int32"));
DataColumn dcNodeName = new DataColumn("NodeName", Type.GetType("System.String"));
DataColumn dcNodeCode = new DataColumn("NodeCode", Type.GetType("System.String"));
DataColumn dcOthers = new DataColumn("Others", Type.GetType("System.String"));
dt.Columns.Add(dcOID);
dt.Columns.Add(dcParentOID);
dt.Columns.Add(dcNodeCode);
dt.Columns.Add(dcNodeName);
dt.Columns.Add(dcOthers);
//以上代码完成了DataTable的构架,但是里面是没有任何数据的
DataRow dr1 = dt.NewRow();
dr1["KeyFieldName"] = 1;
dr1["ParentFieldName"] = DBNull.Value;
dr1["NodeName"] = "根节点名称";
dr1["NodeCode"] = "01";
dr1["Others"] = "其他";
dt.Rows.Add(dr1);
DataRow dr2 = dt.NewRow();
dr2["KeyFieldName"] = 2;
dr2["ParentFieldName"] = 1;
dr2["NodeName"] = "节点子节点名称";
dr2["NodeCode"] = "0101";
dr2["Others"] = "其他";
dt.Rows.Add(dr2);
DataRow dr3 = dt.NewRow();
dr3["KeyFieldName"] = 3;
dr3["ParentFieldName"] = 1;
dr3["NodeName"] = "节点子节点名称";
dr3["NodeCode"] = "0102";
dr3["Others"] = "其他";
dt.Rows.Add(dr3);
DataRow dr4 = dt.NewRow();
dr4["KeyFieldName"] = 4;
dr4["ParentFieldName"] = DBNull.Value;
dr4["NodeName"] = "根节点名称";
dr4["NodeCode"] = "02";
dr4["Others"] = "其他";
dt.Rows.Add(dr4);
DataRow dr5 = dt.NewRow();
dr5["KeyFieldName"] = 5;
dr5["ParentFieldName"] = 4;
dr5["NodeName"] = "节点子节点名称";
dr5["NodeCode"] = "0201";
dr5["Others"] = "其他";
dt.Rows.Add(dr5);
DataRow dr6 = dt.NewRow();
dr6["KeyFieldName"] = 7;
dr6["ParentFieldName"] = 4;
dr6["NodeName"] = "节点子节点名称";
dr6["NodeCode"] = "0202";
dr6["Others"] = "其他";
dt.Rows.Add(dr6);
DataRow dr7 = dt.NewRow();
dr7["KeyFieldName"] = 8;
dr7["ParentFieldName"] = 7;
dr7["NodeName"] = "节点子节点名称";
dr7["NodeCode"] = "020201";
dr7["Others"] = "其他";
dt.Rows.Add(dr7);
return dt;
}
2、数据绑定
//绑定
treeList1.DataSource = CreateTreeListTable();
treeList1.ParentFieldName = "ParentFieldName";
treeList1.KeyFieldName = "KeyFieldName";
3、节点个数
//根节点个数
int rootCount = this.treeList1.Nodes.Count;
//某个节点的子节点个数
int nodeCount = this.treeList1.Nodes[1].Nodes.Count;
//所有节点个数
int allCount = this.treeList1.Nodes.TreeList.AllNodesCount;
//可见节点个数
int cc = this.treeList1.Nodes.TreeList.VisibleNodesCount;
//可见列个数
int dd = this.treeList1.Nodes.TreeList.VisibleColumnCount;
4、常规操作
//是否显示复选框
this.treeList1.OptionsView.ShowCheckBoxes = false ;
//是否可以编辑
this.treeList1.OptionsBehavior.Editable = true;
//第一个根节点编码 01
string a = this.treeList1.Nodes.FirstNode.GetDisplayText("NodeCode");
//第一个节点的首节点编码 0101
string aa = this.treeList1.Nodes[0].FirstNode.GetDisplayText("NodeCode");
//某个节点是否有子节点
bool isChild = this.treeList1.Nodes[1].HasChildren;
TreeListNode node = this.treeList1.Nodes[1].LastNode;
//从0开始的行序号
string id = node.Id.ToString();
//获取某列值
string value1 = node.GetDisplayText(0);
string value2 = node.GetValue("KeyFieldName").ToString();
5、获取选中行的记录
DataRowView drv = treeList1.GetDataRecordByNode(treeList1.FocusedNode) as DataRowView;
if (drv != null)
{
string str = drv["KeyFieldName"].ToString();
}
6、焦点行的背景色
this.treeList1.Appearance.FocusedCell.BackColor = Color.Lime;
this.treeList1.Appearance.FocusedCell.BackColor2 = Color.Lime;
this.treeList1.Appearance.FocusedCell.Options.UseBackColor = true;
7、某列是否允许编辑
// NodeName列可编辑,其他列不可编辑
private void treeList1_ShowingEditor(object sender, CancelEventArgs e)
{
TreeList currentTreeList = sender as TreeList;
if (currentTreeList != null)
{
TreeListNode node = currentTreeList.FocusedNode;
DevExpress.XtraTreeList.Columns.TreeListColumn column = currentTreeList.FocusedColumn;
if (column.FieldName == "NodeName" && node.GetValue(0).ToString() != "")
{
e.Cancel = false;
}
else
{
e.Cancel = true;
}
}
}
8,、高亮显示
//高亮显示
private void treeList1_CustomDrawNodeCell(object sender, DevExpress.XtraTreeList.CustomDrawNodeCellEventArgs e)
{
TreeList node = sender as TreeList;
if (e.Node == node.FocusedNode)
{
e.Graphics.FillRectangle(SystemBrushes.Window, e.Bounds);
Rectangle r = new Rectangle(e.EditViewInfo.ContentRect.Left,
e.EditViewInfo.ContentRect.Top,
Convert.ToInt32(e.Graphics.MeasureString(e.CellText, treeList1.Font).Width + 1),
Convert.ToInt32(e.Graphics.MeasureString(e.CellText, treeList1.Font).Height));
e.Graphics.FillRectangle(SystemBrushes.Highlight, r);
e.Graphics.DrawString(e.CellText, treeList1.Font, SystemBrushes.HighlightText, r);
e.Handled = true;
}
}
9、查询、定位
//查询 定位 根据列名、列值
TreeListNode node = this.treeList1.FindNodeByFieldValue("NodeName", "节点子节点名称");
//查询 定位 根据节点ID 即KeyFieldName
TreeListNode node2 = this.treeList1.FindNodeByKeyID(7);
//查询 定位 根据行序号
TreeListNode node3 = this.treeList1.FindNodeByID(4);
//定位后 把节点设置为焦点
this.treeList1.FocusedNode = node3;