程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> Devexpress treelist 簡介

Devexpress treelist 簡介

編輯:C#入門知識

Devexpress treelist 簡介。本站提示廣大學習愛好者:(Devexpress treelist 簡介)文章只能為提供參考,不一定能成為您想要的結果。以下是Devexpress treelist 簡介正文


節點折疊 this.treeList1.CollapseAll();

  一、簡介

二、屬性列表

1、OptionsSelection:

  EnableAppearanceForcusedCell:選中的Cell的Appearance設置能否可用。默許為True;

  EnableAppearanceForcusedRow:選中的Node的Appearance設置能否可用。默許為True

  InvertSelection:設置選中作風是只使用於選中的Cell,還是使用於除選中的Cell之外的一切Cell。默許為False,即後者; 

  MultiSelect:能否可以選擇多個Node。默許為False。

2、OptionsView:

   AutoCalcPreviewLineCount:能否自動計算預覽節段的高度。默許為True;

   AutoWidth:能否允許列自動調整寬度;默許為True;

   EnableAppearanceEvenRow:生成偶數Node時,是采用由

  TreeListAppearanceCollection.EvenRow屬性提供的Appearance

    設置,還是采用由TreeListAppearanceCollection.Row提供的

   Appearance設置。默許為False,即後者;

   EnableAppearanceOddRow:生成奇數Node時,是采用由

  TreeListAppearanceCollection.OddRow屬性提供的Appearance

    設置,還是采用由TreeListAppearanceCollection.Row提供的

   Appearance設置。默許為False,即後者;

   ShowButtons:能否顯示展開與膨脹按鈕。默許為True;

   ShowCloumns:能否顯示列標題。默許為True;

   ShowFocusedFrame:在取得焦點的Cell上,能否顯示焦點框架。默許為True;

   ShowHorzLines:能否顯示程度線。默許為True;

   ShowIndentAsRowStyle:能否用相應Node的Appearance設置來生成Tree的縮進。默許為False

   ShowIndicator:能否顯示Node的指示符面板。默許為True;

  ShowPreview:能否顯示預覽節段。默許為False;

  ShowRoot:能否在根Node間顯示銜接線。默許為True;

   ShowRowFooterSummary:能否顯示分組腳注。默許為False;

  ShowSummaryFooter:能否顯示摘要腳注。默許為False;

  ShowVertLines:能否顯示垂直線。默許為True;

3、SelectImageList:選中Node時,顯示圖片的列表;

4、StateImageList:指明Node形態的圖片的列表;

三、事情

四、運用

1、 如何隱藏TreeList的列頭

   設置TreeListr的OptionsView的ShowColumns屬性為:False

2、 如何默許展開一切的節點ExpandAll()

   tlvWells.ExpandAll();

    以及TreeNode.Expand   =   false  

    或許你可以控制展開的層數 reeView1.ExpandLevel=10; 展開10層

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

6、 某節點的子節點全部選擇時,該節點選擇;某節點的子節點未全部選擇時,該節點不選擇     

 /// 某節點的子節點全部選擇時,該節點選擇  某節點的子節點未全部選擇時,該節點不選擇
    /// <param name="node"></param>
    /// <param name="check"></param>
    private void SetCheckedParentNodes(TreeListNode node, CheckState check)
    {
      if (node.ParentNode != null)
      {
        CheckState parentCheckState = node.ParentNode.CheckState;
        CheckState nodeCheckState;
        for (int i = 0; i < node.ParentNode.Nodes.Count; i++)
        {
          nodeCheckState = (CheckState)node.ParentNode.Nodes[i].CheckState;
          if (!check.Equals(nodeCheckState))//只需恣意一個與其選中形態不一樣即父節點形態不全選
          {
            parentCheckState = CheckState.Unchecked;
            break;
          }
          parentCheckState = check;//否則(該節點的兄弟節點選中形態都相反),則父節點選中形態為該節點的選中形態
        }
        node.ParentNode.CheckState = parentCheckState;
        SetCheckedParentNodes(node.ParentNode, 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);
    }

7、 獲取選中的復選框數據列表

 private List<int> lstCheckedOfficeID = new List<int>();//選擇局ID集合
    /// 獲取選擇形態的數據主鍵ID集合
    /// <param name="parentNode">父級節點</param>
    private void GetCheckedOfficeID(TreeListNode parentNode)
    {
      if (parentNode.Nodes.Count == 0)
      {
        return;//遞歸終止
      }
      foreach (TreeListNode node in parentNode.Nodes)
      {
        if (node.CheckState == CheckState.Checked)
        {
          DataRowView drv = tlOffice.GetDataRecordByNode(node) as DataRowView;//關鍵代碼,就是不知道是這樣獲取數據而糾結了很久(鬼知道可以轉換為DataRowView啊)
          if (drv != null)
          {
            int OfficeID = (int)drv["OfficeID"];
            lstCheckedOfficeID.Add(OfficeID);
          } 
        }
        GetCheckedOfficeID(node);
      }
    }

  上面測試獲取主鍵列表:

 private void btnCheck_Click(object sender, EventArgs e)
    {
      this.lstCheckedOfficeID.Clear();
      if (tlOffice.Nodes.Count > 0)
      {
        foreach (TreeListNode root in tlOffice.Nodes)
        {
          GetCheckedOfficeID(root);
        }
      }
      string idStr = string.Empty;
      foreach (int id in lstCheckedOfficeID)
      {
        idStr += id + " ";
      }
      MessageBox.Show(idStr);
    }

五、留意事項

1、從數據庫中讀取數據

辦法一:直接點擊控件

 這種辦法銜接後零碎會自動生成一行代碼:

 this. 數據庫表名TableAdapter.Fill(this.dataDataSet4.數據庫表名);

 這種辦法生成後不會像寫代碼那樣銜接後就會把第一行默許為根節點。而且一旦你要把可執行文件拿走就不可用了。由於你在選擇數據庫的時分選的是相對途徑。所以最好用上面的辦法。

辦法二:

用代碼銜接數據庫(寫的代碼辦法很多)  

 String connectionString = "Provider=Microsoft.Jet.OleDb.4.0;Data Source=";
      connectionString += @"D:\Data.mdb";//這用的是相對途徑

應該用絕對途徑。

(String connectionString = @"Provider=Microsoft.Jet.OleDb.4.0;Data Source=";
      connectionString += Application.StartupPath + @"\Data.mdb";
 )
      System.Data.OleDb.OleDbConnection con = new System.Data.OleDb.OleDbConnection(connectionString);
      con.Open();
      System.Data.OleDb.OleDbCommand cmd = new System.Data.OleDb.OleDbCommand("SELECT * FROM FS_STAFF", con);
      System.Data.OleDb.OleDbDataReader reader = cmd.ExecuteReader();
      DataTable table = new DataTable();
      table.Load(reader);
      gridControl2.DataSource = table;

好了,以上內容是給大家復雜引見的Devexpress treelist 知識,希望對大家有所協助,假如大家有任何疑問歡送給我留言,會及時回復大家的!

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved