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;