c# winform treelistview的使用(treegridview)

来源:http://www.cnblogs.com/liuxiaobo93/archive/2017/12/01/7942619.html
-Advertisement-
Play Games

TreeView控制項顯示的內容比較單一,如果需要呈現更多的詳細信息TreeListView是一個不錯的選擇。因此你可以將一個XMl文檔完整的呈現到該控制項中去! ...


TreeView控制項顯示的內容比較單一,如果需要呈現更詳細信息TreeListView是一個不錯的選擇。

先看效果:

首先需要引用文件System.Windows.Forms.TreeListView.dll、System.Runtime.InteropServices.APIs.dll

你可以將TreeListView加入到工具箱中然後在添加到窗體中。

1.你需要添加列

2.你需要添加一個ImageList作為節點圖標的容器(你還需要配置TreeListView的SmallImageList屬性為ImageList控制項的ID)

3.現在可以給控制項綁定數據了

此控制項比較適合呈現具有父子級關係的複雜數據結構,當然也包含XML格式的數據

下麵嘗試解析一個設備樹XML然後綁定到控制項中:

<Device name="hidc-1600tv _192.168.230.188" ItemType="DVR" type="Onvif" TypeID="" Code="" location="" Description="" ID="" UniqueID="192.168.230.188">
  <IP Value="192.168.230.188" />
  <Port Value="80" />
  <Username Value="admin" />
  <Password Value="1234" />
  <AuthenAddress Value="/" />
  <AuthenMode Value="1" />
  <OnvifUser Value="admin" />
  <OnvifPwd Value="1234" />
  <OnvifAddress Value="/onvif/device_service" />
  <RTSPUser Value="admin" />
  <RTSPPwd Value="1234" />
  <ChildDevices>
    <Device name="" ItemType="Channel" type="" TypeID="" Code="" location="" Description="" id="" UniqueID="">
      <PTZEnable Value="True" />
      <PTZ1 Value="5" />
      <PTZ2 Value="15" />
      <PTZ3 Value="25" />
      <PTZ4 Value="35" />
      <PTZ5 Value="45" />
      <PTZ6 Value="55" />
      <PTZ7 Value="65" />
      <PTZ8 Value="75" />
      <PTZ9 Value="85" />
      <ChildDevices>
        <Device name="" ItemType="RStreamer" type="" TypeID="1" Code="" location="" Description="" id="">
          <MediaProfile Value="1" />
          <Multicast Value="False" />
        </Device>
        <Device name="" ItemType="RStreamer" type="" TypeID="2" Code="" location="" Description="" id="">
          <MediaProfile Value="2" />
          <Multicast Value="False" />
        </Device>
      </ChildDevices>
    </Device>
  </ChildDevices>
</Device>

使用遞歸演算法很容易提取XML的結構

        public void LoadXmlTree(string xml)
        {
            XDocument xDoc = XDocument.Parse(xml);

            TreeListViewItem item = new TreeListViewItem();
            string title = xDoc.Root.Attribute("name")?.Value ?? xDoc.Root.Name.LocalName;
            item.Text = title;
            item.ImageIndex = 0;
            item.SubItems.Add(xDoc.Root.Attribute("UniqueID")?.Value);
            item.SubItems.Add(xDoc.Root.Attribute("ItemType")?.Value);
            PopulateTree (xDoc.Root, item.Items);
            tvDevice.Items.Add(item);
        }
        public void PopulateTree (XElement element, TreeListViewItemCollection items)
        {
            foreach (XElement node  in element.Nodes())
            {
                TreeListViewItem item = new TreeListViewItem();
                string title = node.Name.LocalName.Trim();
                item.Text = title;
                if (title == "Device")
                {
                    var attr = node.Attribute("ItemType")?.Value;
                    switch (attr)
                    {
                        case "Channel": item.ImageIndex = 1; break;
                        case "RStreamer": item.ImageIndex = 3; break;
                        default: break;
                    }
                    item.SubItems.Add(node.Attribute("UniqueID")?.Value);
                    item.SubItems.Add(node.Attribute("ItemType")?.Value);
                }
                else
                {
                    item.ImageIndex = 2;
                    item.SubItems.Add(node.Attribute("Value")?.Value);
                }

                if (node.HasElements)
                {
                    PopulateTree (node, item.Items);
                }
                items.Add(item);
            }
        }
    

說明:

TreeListViewItem可構造傳入value和imageindex,其中value會賦值給Text屬性,imageindex就是節點顯示的圖標所對應的ImageList的索引。TreeListViewItem的SubItems就是其擴展列,它會按順序依次顯示到後面的列中。

你可以設置ExpandMethod屬性來控制節點展開的方式,設置CheckBoxes屬性控制是否顯示覆選框。

你可以通過訂閱BeforeExpand、BeforeCollapse、BeforeLabelEdit三個事件來修改不同狀態下的圖標,如:

        private void treeListView1_BeforeExpand(object sender,  TreeListViewCancelEventArgs e)
        {
            if(e.Item.ImageIndex == 0) e.Item.ImageIndex = 1;
        }

你可以設置LabelEdit屬性來激活或禁用編輯,TreeListViewBeforeLabelEditEventArgs參數提供了相應的屬性值。

        private void treeListView1_BeforeLabelEdit(object sender, TreeListViewBeforeLabelEditEventArgs e)
        {
            if(e.ColumnIndex == 1)
            {
                ComboBox combobox = new ComboBox();
                combobox.Items.AddRange(new string[]{"Html","Css","Javascript"});
                e.Editor = combobox;
            }
        }

TreeListView開源你也可以根據自己的需要進行修改。

本文出處:http://www.cnblogs.com/liuxiaobo93/p/7942619.html

附件下載: TreeListView


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 你有一個函數,其中完全取決於參數值而採取不同行為。針對該參數的每個可能值,建立一個獨立的函數。 ...
  • Nginx集群可以實現基於Http Basic身份驗證,通過輸入用戶、密碼,經過SSL協議的HTTPS,從而實現有效的身份驗證並訪問相應的WebApi。當然,訪問的方式不僅僅基於Http Basic一種,還可以通過令牌token的方式進行訪問,又或者基於redis實現單點登錄的訪問,本文主要講述的是... ...
  • 先看下麵的這組字元,如果輸出來,它是無法靠右對齊: string[] s1 = { "300", "5", "54210", "6300", "88" }; foreach (string s in s1) { string s2 = s; Console.WriteLine(s2); } C#的處 ...
  • 本人多年來一直在獨自設計並開發一種“面向表達”的編程語言——S#,以求達到數據即程式、程式即數據的最高境界,可以包容大多數慣用的語言特性。直至今天初步成形,特此在博客園上開篇介紹,通過分享和交流進一步發揚光大。 ...
  • 一 抽象類 描述一個事物,由於沒有足夠的信息,這時就將這個事物稱為抽象事物。abstract為抽象關鍵字,被其聲明的類稱為抽象類,其聲明的方法稱為抽象方法。 抽象屬性聲明不提供屬性訪問器的實現,它只聲明該類支持的屬性,而訪問器的實現留給派生類。 抽象方法聲明不提供方法的實現,他必須是一個空方法,而將 ...
  • 最近需要向客戶發送一些宣傳資料,Excel列表裡面有一兩百個記錄,本來想手寫就算了,估摸著也花不了多少時間,不過寫完一個信封我就後悔了,整天敲著鍵盤,書寫的字太難看了,而且感覺手還是有點累。才第一個啊,想著後面還有那麼多,感覺整個人頭都大了,只好放棄,太沒技術含量了。然後尋找有無一些套打的的軟體,不... ...
  • jquery.qqFace.js使用方法 引用 <script src="~/Content/qqFace/js/jquery.qqFace.js?v=3"></script> <script src="~/Content/qqFace/js/jquery-browser.js"></script> ...
  • 上篇文章介紹了ASP.NET中身份驗證的機制與流程,本文將使用代碼的來介紹如何實現第三方賬戶驗證與雙因數驗證。 本章主要內容有: ● 實現基於微軟賬戶的第三方身份驗證 ● 實現雙因數身份驗證 ● 驗證碼機制 實現基於微軟賬戶的第三方身份驗證 在微軟提供的ASP.NET MVC模板代碼中,預設添加了微 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...