zoukankan      html  css  js  c++  java
  • ListView灵活的用法

    以下是示例的效果图:

    WinForm的ListView控件是可以分组显示的,还可排序。

    可以把ListView的View属性设置为Details


    完整项目请到下面网址查找下载

    http://hovertree.com/hovertreescj/

    或者:
    http://hovertree.com/h/bjaf/scjyuanma.htm

    具体实现在项目 HoverTreeWindowsFormsDemo 中,位于HtDemo文件夹下。

    以下是代码:

    /*
     http://hovertree.com/hovertreescj/
    本示例展示如何使用ListView分组显示数据。
    h : hovertree
     */
    using System;
    using System.Collections;
    using System.Windows.Forms;
    
    namespace HoverTreeWindowsFormsDemo.HtFormSet
    {
        public partial class Form_ListView : Form
        {
            public Form_ListView()
            {
                InitializeComponent();
            }
    
            // Determine whether Windows XP or a later
            // operating system is present.
            private bool _isRunningXPOrLater =
                OSFeature.Feature.IsPresent(OSFeature.Themes);
    
            // Declare a Hashtable array in which to store the groups.
            private Hashtable[] _groupTables;
    
            // Declare a variable to store the current grouping column.
            int _groupColumn = 0;
    
            private void Form_ListView_Load(object sender, EventArgs e)
            {
    
                ColumnHeader h_columnHeader0 = new ColumnHeader();
                h_columnHeader0.Text = "Title";
                // columnHeader0.Width = -1;
                h_columnHeader0.Width = 200;
                ColumnHeader h_columnHeader1 = new ColumnHeader();
                h_columnHeader1.Text = "Info";
                //columnHeader1.Width = -1;
                h_columnHeader1.Width = 150;
    
                ColumnHeader h_columnHeader2 = new ColumnHeader();
                h_columnHeader2.Text = "Year";
                // columnHeader2.Width = -1;
                h_columnHeader2.Width = 100;
                // Add the column headers to listView_HoverTree.
                listView_HoverTree.Columns.AddRange(new ColumnHeader[]
                    {h_columnHeader0, h_columnHeader1, h_columnHeader2});
    
                // Add a handler for the ColumnClick event.
                listView_HoverTree.ColumnClick +=
                    new ColumnClickEventHandler(listView_HoverTree_ColumnClick);
    
                // Create items and add them to listView_HoverTree.
                ListViewItem item0 = new ListViewItem(new string[]
                    {"HoverTreeSCJ",
                "Hewenqi",
                "2016"});
                ListViewItem item1 = new ListViewItem(new string[]
                    {"Keleyi: jQuery and HTML5",
                "柯乐义",
                "2012"});
                ListViewItem item2 = new ListViewItem(new string[]
                    {"hwq2.com",
                "A Good Site",
                "2015"});
                ListViewItem item3 = new ListViewItem(new string[]
                    {"何问起收藏夹",
                "HT",
                "2012"});
                ListViewItem item4 = new ListViewItem(new string[]
                    {"HoverClock",
                "HTML5 Clock",
                "2016"});
                ListViewItem item5 = new ListViewItem(new string[]
                    {"EasySector",
                "HTML5 canvas",
                "2016"});
                listView_HoverTree.Items.AddRange(
                    new ListViewItem[] { item0, item1, item2, item3, item4, item5 });
    
                if (_isRunningXPOrLater)
                {
                    // Create the groupsTable array and populate it with one 
                    // hash table for each column.
                    _groupTables = new Hashtable[listView_HoverTree.Columns.Count];
                    for (int column = 0; column < listView_HoverTree.Columns.Count; column++)
                    {
                        // Create a hash table containing all the groups 
                        // needed for a single column.
                        _groupTables[column] = CreateGroupsTable(column);
                        //groupTables[column]
                    }
    
                    // Start with the groups created for the Title column.
                    SetGroups(0);
                }
    
                // Initialize the form.
                this.Controls.Add(listView_HoverTree);
                this.Size = new System.Drawing.Size(550, 330);
                this.Text = "ListView Groups Example_何问起";
            }
    
            // Groups the items using the groups created for the clicked 
            // column.
            private void listView_HoverTree_ColumnClick(
                object sender, ColumnClickEventArgs e)
            {
                // Set the sort order to ascending when changing
                // column groups; otherwise, reverse the sort order.
                if (listView_HoverTree.Sorting == SortOrder.Descending ||
                    (_isRunningXPOrLater && (e.Column != _groupColumn)))
                {
                    listView_HoverTree.Sorting = SortOrder.Ascending;
                }
                else
                {
                    listView_HoverTree.Sorting = SortOrder.Descending;
                }
                _groupColumn = e.Column;
    
                // Set the groups to those created for the clicked column.
                if (_isRunningXPOrLater)
                {
                    SetGroups(e.Column);
                }
            }
    
            // Sets listView_HoverTree to the groups created for the specified column.
            private void SetGroups(int column)
            {
                // Remove the current groups.
                listView_HoverTree.Groups.Clear();
    
                // Retrieve the hash table corresponding to the column.
                Hashtable groups = (Hashtable)_groupTables[column];
    
                // Copy the groups for the column to an array.
                ListViewGroup[] h_groupsArray = new ListViewGroup[groups.Count];
                groups.Values.CopyTo(h_groupsArray, 0);
    
                // Sort the groups and add them to listView_HoverTree.
                Array.Sort(h_groupsArray, new ListViewGroupSorter(listView_HoverTree.Sorting));
                listView_HoverTree.Groups.AddRange(h_groupsArray);
    
                // Iterate through the items in listView_HoverTree, assigning each 
                // one to the appropriate group.
                foreach (ListViewItem item in listView_HoverTree.Items)
                {
                    // Retrieve the subitem text corresponding to the column.
                    string h_subItemText = item.SubItems[column].Text;
    
                    // For the Title column, use only the first letter.
                    if (column == 0)
                    {
                        h_subItemText = h_subItemText.Substring(0, 1);
                    }
    
                    // Assign the item to the matching group.
                    item.Group = (ListViewGroup)groups[h_subItemText];
                }
            }
    
            // Creates a Hashtable object with one entry for each unique
            // subitem value (or initial letter for the parent item)
            // in the specified column.
            private Hashtable CreateGroupsTable(int column)
            {
                // Create a Hashtable object.
                Hashtable h_groups = new Hashtable();
    
                // Iterate through the items in listView_HoverTree.
                foreach (ListViewItem item in listView_HoverTree.Items)
                {
                    // Retrieve the text value for the column.
                    string h_subItemText = item.SubItems[column].Text;
    
                    // Use the initial letter instead if it is the first column.
                    if (column == 0)
                    {
                        h_subItemText = h_subItemText.Substring(0, 1);
                    }
    
                    // If the groups table does not already contain a group
                    // for the subItemText value, add a new group using the 
                    // subItemText value for the group header and Hashtable key.
                    if (!h_groups.Contains(h_subItemText))
                    {
                        h_groups.Add(h_subItemText, new ListViewGroup(h_subItemText,
                            HorizontalAlignment.Left));
                    }
                }
    
                // Return the Hashtable object.
                return h_groups;
            }
    
            // Sorts ListViewGroup objects by header value.
            private class ListViewGroupSorter : IComparer
            {
                private SortOrder h_order;
    
                // Stores the sort order.
                public ListViewGroupSorter(SortOrder theOrder)
                {
                    h_order = theOrder;
                }
    
                // Compares the groups by header value, using the saved sort
                // order to return the correct value.
                public int Compare(object x, object y)
                {
                    int result = String.Compare(
                        ((ListViewGroup)x).Header,
                        ((ListViewGroup)y).Header
                    );
                    if (h_order == SortOrder.Ascending)
                    {
                        return result;
                    }
                    else
                    {
                        return -result;
                    }
                }
            }
    
        }
    }

    转自:http://hovertree.com/h/bjaf/jynj6isd.htm

    推荐:http://www.cnblogs.com/roucheng/p/csgeshi.html

  • 相关阅读:
    初识 visJs (基于html5 canvas开发的可视化框架)
    VueJs
    VueJS 使用i18n做国际化切换中英文
    vue-cli项目接口地址可配置化(多环境部署)一处修改多处适用
    vue + element-ui 制作下拉菜单(可配置路由、可根据路由高亮list、可刷新自动展开定位路由)
    vue-cli -- > 项目基本构建的方法
    javascript代码工具库
    HTML5新功能之六 《Web通信、WebSockets和跨文档消息传输》
    《响应式Web设计:HTML5和CSS3实战》 读书笔记
    HTML5新功能之二 《Geolocation获取地理位置》
  • 原文地址:https://www.cnblogs.com/roucheng/p/ListViewDemo.html
Copyright © 2011-2022 走看看