Devexpress treelist 简介

2019-12-30 15:34:16王旭

  this.treeList.Nodes[0].ExpandAll();// 第一层下的所有接点展开

3、 如何让TreeList的每个结点高亮显示?

代码如下:


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;
      }
    }

4、 数据绑定最基本的两个属性:KeyFieldName和ParentFieldName。

(这两个属性一设置就基本上可以实现分级了)可以通过代码的编写实现,也可以直接在属性里面直接实现。这种数据库设计是比较常见的,一般数据满足树形关系就可以这样设计。绑定数据时,只需指定DataSource为对应 的DataTable,指定KeyFieldName为表主键字段,ParentFieldName为表指向主键的外键字段名。


 private void BindData()
      {
      this.tlOffice.DataSource = dtOffice;
      tlOffice.KeyFieldName = "OfficeID";
      //tlOffice.DataMember = "OfficeName";
      tlOffice.Columns["OfficeName"].Caption = "局名称";
      tlOffice.ParentFieldName = "ParentOfficeID";
    }

5、 选择某一节点时,该节点的子节点全部选择  取消某一节点时,该节点的子节点全部取消选择

      哪个节点引起行为的?节点是选中还是取消选中?由此确定方法的两个参数:TreeListNode和CheckState。遍历该节点及其子孙,并将其选中状态设置为该节点的状态即可。


    /// 选择某一节点时,该节点的子节点全部选择 取消某一节点时,该节点的子节点全部取消选择
    /// <param name="node"></param>
    /// <param name="state"></param>
    private void SetCheckedChildNodes(TreeListNode node, CheckState check)
    {
      for (int i = 0; i < node.Nodes.Count; i++)
      {
        node.Nodes[i].CheckState = check;
        SetCheckedChildNodes(node.Nodes[i], check);
      }
  } 

上两步写好了,别忘了上面的两个方法在TreeList_AfterCheckNode里面触发:


private void tlOffice_AfterCheckNode(object sender, DevExpress.XtraTreeList.NodeEventArgs e) 
{ 
  SetCheckedChildNodes(e.Node, e.Node.CheckState); 
  SetCheckedParentNodes(e.Node, e.Node.CheckState); 
}