İngilizce dilinde oku

Aracılığıyla paylaş


ListViewGroupCollection Sınıf

Tanım

Denetim ListView içindeki grup koleksiyonunu temsil eder.

C#
[System.ComponentModel.ListBindable(false)]
public class ListViewGroupCollection : System.Collections.IList
Devralma
ListViewGroupCollection
Öznitelikler
Uygulamalar

Örnekler

Aşağıdaki örnekte, öğeleri ayrıntılar görünümünde alt öğe değerine göre düzenlemek için gruplandırma özelliğinin nasıl kullanılacağı ListView gösterilmektedir. Bu gruplandırma biçimi, Windows Gezgini'nde kullanılan gruplandırmaya benzer. Örnekte gruplar dinamik olarak oluşturulur. Her alt sütun için, her benzersiz alt değer için bir grup oluşturulur. Üst öğe sütunu için, her benzersiz ilk harf için bir grup oluşturulur. Bir sütunun üst bilgisine tıklandığında, öğeler bu sütun için oluşturulan gruplara sıralanır. Aynı sütun üst bilgisine yeniden tıklanması grupların sırasını tersine çevirir.

C#
using System;
using System.Collections; 
using System.Windows.Forms;

public class ListViewGroupsExample : Form
{
    private ListView myListView;

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

    public ListViewGroupsExample()
    {
        // Initialize myListView.
        myListView = new ListView();
        myListView.Dock = DockStyle.Fill;
        myListView.View = View.Details;
        myListView.Sorting = SortOrder.Ascending;

        // Create and initialize column headers for myListView.
        ColumnHeader columnHeader0 = new ColumnHeader();
        columnHeader0.Text = "Title";
        columnHeader0.Width = -1;
        ColumnHeader columnHeader1 = new ColumnHeader();
        columnHeader1.Text = "Author";
        columnHeader1.Width = -1;
        ColumnHeader columnHeader2 = new ColumnHeader();
        columnHeader2.Text = "Year";
        columnHeader2.Width = -1;

        // Add the column headers to myListView.
        myListView.Columns.AddRange(new ColumnHeader[] 
            {columnHeader0, columnHeader1, columnHeader2});

        // Add a handler for the ColumnClick event.
        myListView.ColumnClick += 
            new ColumnClickEventHandler(myListView_ColumnClick);

        // Create items and add them to myListView.
        ListViewItem item0 = new ListViewItem( new string[] 
            {"Programming Windows", 
            "Petzold, Charles", 
            "1998"} );
        ListViewItem item1 = new ListViewItem( new string[] 
            {"Code: The Hidden Language of Computer Hardware and Software", 
            "Petzold, Charles", 
            "2000"} );
        ListViewItem item2 = new ListViewItem( new string[] 
            {"Programming Windows with C#", 
            "Petzold, Charles", 
            "2001"} );
        ListViewItem item3 = new ListViewItem( new string[] 
            {"Coding Techniques for Microsoft Visual Basic .NET", 
            "Connell, John", 
            "2001"} );
        ListViewItem item4 = new ListViewItem( new string[] 
            {"C# for Java Developers", 
            "Jones, Allen & Freeman, Adam", 
            "2002"} );
        ListViewItem item5 = new ListViewItem( new string[] 
            {"Microsoft .NET XML Web Services Step by Step", 
            "Jones, Allen & Freeman, Adam", 
            "2002"} );
        myListView.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[myListView.Columns.Count];
            for (int column = 0; column < myListView.Columns.Count; column++)
            {
                // Create a hash table containing all the groups 
                // needed for a single column.
                groupTables[column] = CreateGroupsTable(column);
            }

            // Start with the groups created for the Title column.
            SetGroups(0);
        }

        // Initialize the form.
        this.Controls.Add(myListView);
        this.Size = new System.Drawing.Size(550, 330);
        this.Text = "ListView Groups Example";
    }

    [STAThread]
    static void Main() 
    {
        Application.EnableVisualStyles();
        Application.Run(new ListViewGroupsExample());
    }

    // Groups the items using the groups created for the clicked 
    // column.
    private void myListView_ColumnClick(
        object sender, ColumnClickEventArgs e)
    {
        // Set the sort order to ascending when changing
        // column groups; otherwise, reverse the sort order.
        if ( myListView.Sorting == SortOrder.Descending || 
            ( isRunningXPOrLater && (e.Column != groupColumn) ) )
        {
            myListView.Sorting = SortOrder.Ascending;
        }
        else 
        {
            myListView.Sorting = SortOrder.Descending;
        }
        groupColumn = e.Column;

        // Set the groups to those created for the clicked column.
        if (isRunningXPOrLater)
        {
            SetGroups(e.Column);
        }
    }

    // Sets myListView to the groups created for the specified column.
    private void SetGroups(int column)
    {
        // Remove the current groups.
        myListView.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[] groupsArray = new ListViewGroup[groups.Count];
        groups.Values.CopyTo(groupsArray, 0);

        // Sort the groups and add them to myListView.
        Array.Sort(groupsArray, new ListViewGroupSorter(myListView.Sorting));
        myListView.Groups.AddRange(groupsArray);

        // Iterate through the items in myListView, assigning each 
        // one to the appropriate group.
        foreach (ListViewItem item in myListView.Items)
        {
            // Retrieve the subitem text corresponding to the column.
            string subItemText = item.SubItems[column].Text;

            // For the Title column, use only the first letter.
            if (column == 0) 
            {
                subItemText = subItemText.Substring(0, 1);
            }

            // Assign the item to the matching group.
            item.Group = (ListViewGroup)groups[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 groups = new Hashtable();

        // Iterate through the items in myListView.
        foreach (ListViewItem item in myListView.Items)
        {
            // Retrieve the text value for the column.
            string subItemText = item.SubItems[column].Text;

            // Use the initial letter instead if it is the first column.
            if (column == 0) 
            {
                subItemText = 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 (!groups.Contains(subItemText))
            {
                groups.Add( subItemText, new ListViewGroup(subItemText, 
                    HorizontalAlignment.Left) );
            }
        }

        // Return the Hashtable object.
        return groups;
    }

    // Sorts ListViewGroup objects by header value.
    private class ListViewGroupSorter : IComparer
    {
        private SortOrder order;

        // Stores the sort order.
        public ListViewGroupSorter(SortOrder theOrder) 
        { 
            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 (order == SortOrder.Ascending)
            {
                return result;
            }
            else 
            {
                return -result;
            }
        }
    }
}

Açıklamalar

ListView.Groups bir denetimle ListView ilişkili almak için ListViewGroupCollection özelliğini kullanın. Bu koleksiyon, özelliği dışında View.Listbir değere ayarlandığında denetimde ListView.View gösterilen grupları temsil eden nesneleri içerirListViewGroup. Bir gruba atanmamış öğeler, üst bilgi etiketi "DefaultGroup{0}" olan varsayılan grupta görünür. Varsayılan grup koleksiyonda ListView.Groups yer almadığından değiştirilemez. Tüm öğelerin gruplara düzgün şekilde eklendiğinden emin olmak için hata ayıklamada öncelikli olarak yararlıdır. Koleksiyonda ListView.Groups grup yoksa gruplandırma özelliği devre dışı bırakılır.

Koleksiyona Add tek bir grup eklemek için yöntemini kullanın. Koleksiyonun Insert içindeki belirli bir dizine grup eklemek için yöntemini kullanın. Bir grubu kaldırmak için yöntemini kullanın Remove . Belirli bir dizindeki RemoveAt grubu kaldırmak için yöntemini kullanın.

Koleksiyona birden çok kez ekleyemezsiniz ListViewGroup . Koleksiyonun içindeki bir grubu yeniden konumlandırmak için önce koleksiyondan kaldırılması ve ardından istenen konuma eklenmesi gerekir. Contains Belirli bir grubun koleksiyonda olup olmadığını belirlemek için yöntemini kullanın. Koleksiyondaki bir grubun dizinini almak için yöntemini kullanın IndexOf . Grubu dizin oluşturucuyla Item[] belirli bir dizinde alabilir veya ayarlayabilirsiniz.

Koleksiyona AddRange birden çok grup eklemek için yöntemini kullanın. Birden çok grubu bir grup dizisi olarak veya başka ListView bir denetimin özelliği aracılığıyla ListView.Groups aldığınız bir ListViewGroupCollection grup olarak ekleyebilirsiniz. Koleksiyondaki Clear tüm grupları kaldırmak için yöntemini kullanın.

Not

Remove, RemoveAtve Clear yöntemleri koleksiyondan grupları kaldırır, ancak denetimden ListView hiçbir öğeyi kaldırmaz. Koleksiyonda ListView.Groups hiç grup yoksa gruplandırma özelliği devre dışı bırakılır ve denetimdeki tüm öğeler normal şekilde görüntülenir.

AddRange ve Clear yöntemleri, denetimdeki ListView öğeleri gruplandırmak için birden çok yol sağlamak istediğinizde kullanışlıdır. Bunu yapmak için birden çok grup dizisi oluşturun. Gruplandırmayı değiştirmek için önce yöntemini kullanarak Clear koleksiyondaki tüm grupları kaldırın, ardından görüntülenecek bir sonraki grup dizisini eklemek için yöntemini kullanın AddRange .

CopyTo Bir koleksiyondaki grupları belirtilen dizinden başlayarak uyumlu bir diziye kopyalamak için yöntemini kullanın. Bu, örneğin yöntemini kullanarak Array.Sort koleksiyondaki grupları sıralamak istediğinizde kullanışlıdır. Bunu yapmak için grupları uyumlu bir diziye kopyalayın ve ardından diziyi sıralayın. Ardından yöntemini kullanarak Clear koleksiyondaki tüm grupları kaldırın ve ardından sıralanmış diziyi koleksiyona geri eklemek için yöntemini kullanın AddRange .

Koleksiyonda Count kaç grup olduğunu belirlemek için özelliğini kullanın. Koleksiyonda yineleme yapmak için yönteminden döndürülen öğesini GetEnumerator kullanınIEnumerator.

Not

Gruplandırma özelliği yalnızca uygulamanız yöntemini çağırdığında Windows XP ve Windows Server 2003 ailesinde Application.EnableVisualStyles kullanılabilir. Önceki işletim sistemlerinde, gruplarla ilgili tüm kodlar yoksayılır ve gruplar görünmez. Sonuç olarak, gruplandırma özelliğine bağlı olan kodlar düzgün çalışmayabilir. Gruplandırma özelliğinin kullanılabilir olup olmadığını belirleyen bir test eklemek ve kullanılamadığında alternatif işlevler sağlamak isteyebilirsiniz. Örneğin, gruba göre sıralamayı desteklemeyen işletim sistemlerinde çalışırken alternatif sıralama sağlamak isteyebilirsiniz.

Ekleme işareti özelliği, işletim sistemi temaları özelliğini sağlayan kitaplık tarafından sağlanır. Bu kitaplığın kullanılabilirliğini denetlemek için yöntem aşırı yüklemesini çağırın FeatureSupport.IsPresent(Object) ve değerini geçirin OSFeature.Themes .

Özellikler

Count

Koleksiyondaki grup sayısını alır.

Item[Int32]

Koleksiyonun içinde belirtilen dizinde öğesini ListViewGroup alır veya ayarlar.

Item[String]

belirtilen Name özellik değeriyle değerini alır veya ayarlarListViewGroup.

Yöntemler

Add(ListViewGroup)

Belirtilen ListViewGroup öğesini koleksiyona ekler.

Add(String, String)

ve Header özelliklerini başlatmak Name için belirtilen değerleri kullanarak koleksiyona yeni ListViewGroup bir ekler.

AddRange(ListViewGroup[])

Koleksiyona bir grup dizisi ekler.

AddRange(ListViewGroupCollection)

Var olan ListViewGroupCollection bir gruptaki grupları koleksiyona ekler.

Clear()

Koleksiyondaki tüm grupları kaldırır.

Contains(ListViewGroup)

Belirtilen grubun koleksiyonda bulunup bulunmadığını belirler.

CopyTo(Array, Int32)

Koleksiyondaki grupları, hedef dizinin belirtilen dizininden başlayarak uyumlu bir tek boyutlu Arrayöğesine kopyalar.

Equals(Object)

Belirtilen nesnenin geçerli nesneye eşit olup olmadığını belirler.

(Devralındığı yer: Object)
GetEnumerator()

Koleksiyonda yineleme yapmak için kullanılan bir numaralandırıcı döndürür.

GetHashCode()

Varsayılan karma işlevi işlevi görür.

(Devralındığı yer: Object)
GetType()

Type Geçerli örneğini alır.

(Devralındığı yer: Object)
IndexOf(ListViewGroup)

Koleksiyon içinde belirtilen ListViewGroup öğesinin dizinini döndürür.

Insert(Int32, ListViewGroup)

Belirtilen öğesini belirtilen ListViewGroup dizindeki koleksiyona ekler.

MemberwiseClone()

Geçerli Objectöğesinin sığ bir kopyasını oluşturur.

(Devralındığı yer: Object)
Remove(ListViewGroup)

Belirtilen ListViewGroup öğesini koleksiyondan kaldırır.

RemoveAt(Int32)

ListViewGroup koleksiyon içinde belirtilen dizinde öğesini kaldırır.

ToString()

Geçerli nesneyi temsil eden dizeyi döndürür.

(Devralındığı yer: Object)

Belirtik Arabirim Kullanımları

ICollection.IsSynchronized

Koleksiyona erişimin eşitlenip eşitlenmediğini belirten bir değer alır (iş parçacığı güvenli).

ICollection.SyncRoot

Koleksiyona erişimi eşitlemek için kullanılabilecek bir nesne alır.

IList.Add(Object)

öğesine ListViewGroupCollectionyeni ListViewGroup bir ekler.

IList.Contains(Object)

Belirtilen değerin koleksiyonda bulunup bulunmadığını belirler.

IList.IndexOf(Object)

Belirtilen değerin koleksiyonundaki dizini döndürür.

IList.Insert(Int32, Object)

içine ListViewGroupCollectionbir ListViewGroup ekler.

IList.IsFixedSize

Koleksiyonun sabit bir boyuta sahip olup olmadığını gösteren bir değer alır.

IList.IsReadOnly

Topluluğun salt okunur olup olmadığını gösteren bir değer alır.

IList.Item[Int32]

Koleksiyonun içinde belirtilen dizinde öğesini ListViewGroup alır veya ayarlar.

IList.Remove(Object)

öğesini ListViewGroup içinden ListViewGroupCollectionkaldırır.

Uzantı Metotları

Cast<TResult>(IEnumerable)

öğesinin IEnumerable öğelerini belirtilen türe atar.

OfType<TResult>(IEnumerable)

Öğesinin IEnumerable öğelerini belirtilen türe göre filtreler.

AsParallel(IEnumerable)

Sorgunun paralelleştirilmesini etkinleştirir.

AsQueryable(IEnumerable)

bir IEnumerable öğesini öğesine IQueryabledönüştürür.

Şunlara uygulanır

Ürün Sürümler
.NET Framework 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
Windows Desktop 3.0, 3.1, 5, 6, 7, 8, 9, 10

Ayrıca bkz.