1. 程式人生 > >DevExpress TreeList控制元件的複選框

DevExpress TreeList控制元件的複選框

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow

也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!

               

        TreeList控制元件可以同時顯示樹結構和其他資料列,即在一個列上建立父子關係展開或收縮,同時還可以顯示其他列的內容。
        在TreeList中同時引入了 Node和 Columns概念, 第一列為樹結構, 其餘列為資料列, 任何列都可作為樹結構列(即拖動到第一列)顯示。
實現多級樹---資料來源繫結


        在TreeList裡新增要顯示列(第一列為樹結構,其他列為資料列),並指定FieldName為資料庫列名
        指定KeyFieldName屬性為主鍵,ParentFieldName屬性為樹狀分組列。注意 ParentFieldName指定的列如果為空值,樹狀可能會混亂(只有一個根結點,其他為此節點的子結點)
        用TreeList.DataSource = DataTable 繫結資料即可
樹形控制元件是使用頻率很高的一種控制元件。對於屬性控制元件往往需要下面兩個功能:
        1.TreeList帶有CheckBox,並且節點要有三種狀態(所有的子節點都選中,所有的子節點都沒選擇,一部分子節點選中)。使用DevXpress的TreeList控制元件很容易實現這一功能。
        設定TreeList.OptionsView.ShowCheckBoxes = true //是否顯示CheckBox
        設定TreeList.OptionsBehavior.AllowIndeterminateCheckState = true; //設定節點是否有中間狀態,即一部分子節點選中,一部分子節點沒有選中
設定這兩個屬性之後就實現了TreeList帶有CheckBox,並且節點有三種狀態。
        2.選中父節點或者子節點相互影響的功能,如選擇父節點選擇所有子節點。繫結TreeList的兩個事件AfterCheckNode和BeforeCheckNode
DevExpress的TreeList要想在節點前面顯示覆選框,得修改屬性OptionsView->ShowCheckBoxes=True
複選框的子節點與父節點統一的規則有:

        1、選擇某一節點時,該節點的子節點全部選擇
        2、取消某一節點時,該節點的子節點全部取消選擇
        3、某節點的子節點全部選擇時,該節點選擇
        4、某節點的子節點未全部選擇時,該節點不選擇

[csharp]  view plain  copy   在CODE上檢視程式碼片
派生到我的程式碼片
  1. #region 節點選中前事件  
  2.  private void treeList1_BeforeCheckNode(object sender, DevExpress.XtraTreeList.CheckNodeEventArgs e)  
  3.  {  
  4.      if (e.PrevState == CheckState.Checked)  
  5.      {  
  6.          e.State = CheckState.Unchecked;  
  7.      }  
  8.      else  
  9.      {  
  10.          e.State = CheckState.Checked;  
  11.      }  
  12.  }  
  13.  #endregion  
  14.  
  15.  #region 節點選中後事件  
  16.  private void treeList1_AfterCheckNode(object sender, DevExpress.XtraTreeList.NodeEventArgs e)  
  17.  {  
  18.      SetCheckedChildNodes(e.Node, e.Node.CheckState);  
  19.      SetCheckedParentNodes(e.Node, e.Node.CheckState);  
  20.  }  
  21.  #endregion  
  22.  
  23.  #region 設定子節點狀態  
  24.  private void SetCheckedChildNodes(DevExpress.XtraTreeList.Nodes.TreeListNode node, CheckState check)  
  25.  {  
  26.      for (int i = 0; i < node.Nodes.Count; i++)  
  27.      {  
  28.          node.Nodes[i].CheckState = check;  
  29.          SetCheckedChildNodes(node.Nodes[i], check);  
  30.      }  
  31.  }  
  32.  #endregion  
  33.  
  34.  #region 設定父節點狀態  
  35.  private void SetCheckedParentNodes(DevExpress.XtraTreeList.Nodes.TreeListNode node, CheckState check)  
  36.  {  
  37.      if (node.ParentNode != null)  
  38.      {  
  39.          bool b = false;  
  40.          CheckState state;  
  41.          for (int i = 0; i < node.ParentNode.Nodes.Count; i++)  
  42.          {  
  43.              state = (CheckState)node.ParentNode.Nodes[i].CheckState;  
  44.              if (!check.Equals(state))  
  45.              {  
  46.                  b = !b;  
  47.                  break;  
  48.              }  
  49.          }  
  50.          if (b)  
  51.          {  
  52.              node.ParentNode.CheckState = CheckState.Indeterminate;  
  53.          }  
  54.          else  
  55.          {  
  56.              node.ParentNode.CheckState = check;  
  57.          }  
  58.          SetCheckedParentNodes(node.ParentNode, check);  
  59.      }  
  60.  }  
  61.  #endregion  
           

給我老師的人工智慧教程打call!http://blog.csdn.net/jiangjunshow

這裡寫圖片描述

        TreeList控制元件可以同時顯示樹結構和其他資料列,即在一個列上建立父子關係展開或收縮,同時還可以顯示其他列的內容。
        在TreeList中同時引入了 Node和 Columns概念, 第一列為樹結構, 其餘列為資料列, 任何列都可作為樹結構列(即拖動到第一列)顯示。
實現多級樹---資料來源繫結
        在TreeList裡新增要顯示列(第一列為樹結構,其他列為資料列),並指定FieldName為資料庫列名
        指定KeyFieldName屬性為主鍵,ParentFieldName屬性為樹狀分組列。注意 ParentFieldName指定的列如果為空值,樹狀可能會混亂(只有一個根結點,其他為此節點的子結點)
        用TreeList.DataSource = DataTable 繫結資料即可
樹形控制元件是使用頻率很高的一種控制元件。對於屬性控制元件往往需要下面兩個功能:
        1.TreeList帶有CheckBox,並且節點要有三種狀態(所有的子節點都選中,所有的子節點都沒選擇,一部分子節點選中)。使用DevXpress的TreeList控制元件很容易實現這一功能。
        設定TreeList.OptionsView.ShowCheckBoxes = true //是否顯示CheckBox
        設定TreeList.OptionsBehavior.AllowIndeterminateCheckState = true; //設定節點是否有中間狀態,即一部分子節點選中,一部分子節點沒有選中
設定這兩個屬性之後就實現了TreeList帶有CheckBox,並且節點有三種狀態。
        2.選中父節點或者子節點相互影響的功能,如選擇父節點選擇所有子節點。繫結TreeList的兩個事件AfterCheckNode和BeforeCheckNode
DevExpress的TreeList要想在節點前面顯示覆選框,得修改屬性OptionsView->ShowCheckBoxes=True
複選框的子節點與父節點統一的規則有:
        1、選擇某一節點時,該節點的子節點全部選擇
        2、取消某一節點時,該節點的子節點全部取消選擇
        3、某節點的子節點全部選擇時,該節點選擇
        4、某節點的子節點未全部選擇時,該節點不選擇

[csharp]  view plain  copy   在CODE上檢視程式碼片 派生到我的程式碼片
  1. #region 節點選中前事件  
  2.  private void treeList1_BeforeCheckNode(object sender, DevExpress.XtraTreeList.CheckNodeEventArgs e)  
  3.  {  
  4.      if (e.PrevState == CheckState.Checked)  
  5.      {  
  6.          e.State = CheckState.Unchecked;  
  7.      }  
  8.      else  
  9.      {  
  10.          e.State = CheckState.Checked;  
  11.      }  
  12.  }  
  13.  #endregion  
  14.  
  15.  #region 節點選中後事件  
  16.  private void treeList1_AfterCheckNode(object sender, DevExpress.XtraTreeList.NodeEventArgs e)  
  17.  {  
  18.      SetCheckedChildNodes(e.Node, e.Node.CheckState);  
  19.      SetCheckedParentNodes(e.Node, e.Node.CheckState);  
  20.  }  
  21.  #endregion  
  22.  
  23.  #region 設定子節點狀態  
  24.  private void SetCheckedChildNodes(DevExpress.XtraTreeList.Nodes.TreeListNode node, CheckState check)  
  25.  {  
  26.      for (int i = 0; i < node.Nodes.Count; i++)  
  27.      {  
  28.          node.Nodes[i].CheckState = check;  
  29.          SetCheckedChildNodes(node.Nodes[i], check);  
  30.      }  
  31.  }  
  32.  #endregion  
  33.  
  34.  #region 設定父節點狀態  
  35.  private void SetCheckedParentNodes(DevExpress.XtraTreeList.Nodes.TreeListNode node, CheckState check)  
  36.  {  
  37.      if (node.ParentNode != null)  
  38.      {  
  39.          bool b = false;  
  40.          CheckState state;  
  41.          for (int i = 0; i < node.ParentNode.Nodes.Count; i++)  
  42.          {  
  43.              state = (CheckState)node.ParentNode.Nodes[i].CheckState;  
  44.              if (!check.Equals(state))  
  45.              {  
  46.                  b = !b;  
  47.                  break;  
  48.              }  
  49.          }  
  50.          if (b)  
  51.          {  
  52.              node.ParentNode.CheckState = CheckState.Indeterminate;  
  53.          }  
  54.          else  
  55.          {  
  56.              node.ParentNode.CheckState = check;  
  57.          }  
  58.          SetCheckedParentNodes(node.ParentNode, check);  
  59.      }  
  60.  }  
  61.  #endregion