treelist的构造和datatable的构造方法一样,就是需要多添加ID和PID两个列并赋值
首先定义需要列名称、编码等
构建TreeList还必须定义ID和PARENTID(这是为了确定树的分层结构)
private const string NAME_COLUMN = "NAME";
private const string CODE_COLUMN = "CODE";
private const string ID_COLUMN = "ID";
private const string PARENT_COLUMN = "PARENT";
写一个加载TreeList的方法
public void LoadTreeList()
{
//构建datatable
DataTable pDataTable = CreateDataTableStruct();
FillDataTableData(pDataTable);
//构建treelist结构
CreateTreeListStruct();
//将dataTable设置为treelist的datasource
this.treeList1.ParentFieldName = PARENT_COLUMN;//定义tree的父节点列
this.treeList1.KeyFieldName = ID_COLUMN;//定义子节点列
this.treeList1.DataSource = pDataTable;
}
写构建datatable的方法(定义了四个列)
private DataTable CreateDataTableStruct()
{
DataTable pDataTable = new DataTable();
//名称列
DataColumn pNameColumn = new DataColumn();
pNameColumn.ColumnName = NAME_COLUMN;
pNameColumn.DataType = typeof(string);
pNameColumn.Caption = "名称";
pDataTable.Columns.Add(pNameColumn);
//编码列
DataColumn pCodeColumn = new DataColumn();
pCodeColumn.ColumnName = CODE_COLUMN;
pCodeColumn.DataType = typeof(string);
pCodeColumn.Caption = "编码";
pDataTable.Columns.Add(pCodeColumn);
//ID列
DataColumn pIdColumn = new DataColumn();
pIdColumn.ColumnName = ID_COLUMN;
pIdColumn.DataType = typeof(int);
pIdColumn.Caption = "ID";
pDataTable.Columns.Add(pIdColumn);
//PID列
DataColumn pParentIdColumn = new DataColumn();
pParentIdColumn.ColumnName = PARENT_COLUMN;
pParentIdColumn.DataType = typeof(int);
pParentIdColumn.Caption = "PID";
pDataTable.Columns.Add(pParentIdColumn);
}
列定义好后,需要定义行来填充行
private void FillNewRow(DataTable pDataSource, int id,int pid,string name, string code)
{
DataRow pNewDataRow = pDataSource.NewRow();
pNewDataRow[ID_COLUMN] = id;
pNewDataRow[PARENT_COLUMN] = pid;
pNewDataRow[NAME_COLUMN] = name;
pNewDataRow[CODE_COLUMN] = code;
pDataSource.Rows.Add(pNewDataRow);
}
private void FillNewRoadRow(DataTable pDataSource, int id, int pid, string name)
{
FillNewRow(pDataSource, id, pid, name, "");
}
列和行都定义好后开始填充表
private void FillDataTableData(DataTable dataSource)
{
FillNewRow(dataSource,0,-1, "图书馆");
FillNewRow(dataSource,1,0, "山东科技大学图书馆");
FillNewRow(dataSource,2,0, "江苏海洋大学图书馆");
FillNewRow(dataSource, 3,1,"数值分析", "001");
FillNewRow(dataSource, 4,1,"现代测量数据处理", "002");
FillNewRow(dataSource, 5,1,"跨文化交际", "003");
FillNewRow(dataSource, 6,2,"组合导航", "004");
FillNewRow(dataSource, 7,2,"微波遥感", "005");
FillNewRow(dataSource, 8,2,"海洋测量技术", "006");
}
至此,一个datatable已经建好了,如下图样式
接下来将datatable数据表赋给treelist,首先先构造出树的列,最后再把行的值传进去
private void CreateTreeListStruct()
{
//清空列
treeList1.Columns.Clear();
//名称列
TreeListColumn pNameColumn = this.treeList1.Columns.Add();//添加新列
pNameColumn.FieldName = NAME_COLUMN;
pNameColumn.Visible = true;//定义显不显示,如果不写就是默认不显示
pNameColumn.Caption = "名称";
//编码列
TreeListColumn pCodeColumn = this.treeList1.Columns.Add();
pCodeColumn.FieldName = CODE_COLUMN;
pCodeColumn.Visible = true; // 显示
pCodeColumn.Caption = "编码";
//ID列
TreeListColumn pIdColumn = this.treeList1.Columns.Add();
pIdColumn.FieldName = ID_COLUMN;
pIdColumn.Visible = false;//不显示
pIdColumn.Caption = "ID";
//PID列
TreeListColumn pParentIdColumn = this.treeList1.Columns.Add();
pParentIdColumn.FieldName = PARENT_COLUMN;
pParentIdColumn.Visible = false;//不显示
pParentIdColumn.Caption = "PID";
}
在加载方法里已经将treelist的节点与ID列PID列关联
效果图如下
//获取鼠标点击的行的信息
TreeListNode treeListNode = treeList1.FocusedNode;