¿Le resultó útil esta página?
Sus comentarios sobre este contenido son muy importantes. Háganos saber su opinión.
¿Tiene comentarios adicionales?
Caracteres restantes: 1500
ListViewGroupCollection (Clase)
Collapse the table of content
Expand the table of content

ListViewGroupCollection (Clase)

Representa la colección de grupos de un control ListView.

Espacio de nombres: System.Windows.Forms
Ensamblado: System.Windows.Forms (en system.windows.forms.dll)

public class ListViewGroupCollection : IList, ICollection, IEnumerable
public class ListViewGroupCollection implements IList, ICollection, 
	IEnumerable
public class ListViewGroupCollection implements IList, ICollection, 
	IEnumerable
No aplicable.

Utilice la propiedad ListView.Groups para obtener el ListViewGroupCollection asociado a un control ListView. Esta colección contiene los objetos ListViewGroup que representan los grupos mostrados en el control cuando la propiedad ListView.View se establece en un valor distinto de View.List. Los elementos que no estén asignados a ningún grupo aparecerán en el grupo predeterminado, que tiene la etiqueta de encabezado "DefaultGroup{0}". El grupo predeterminado no está incluido en la colección de ListView.Groups y no puede modificarse. Resulta útil principalmente en la depuración, para garantizar que todos los elementos se han agregado correctamente a los grupos. Si no hay ningún grupo en la colección ListView.Groups, la característica de agrupación se desactiva.

Utilice el método Add para agregar un único grupo a la colección. Utilice el método Insert para agregar un grupo a un índice determinado dentro de la colección. Para quitar un grupo, utilice el método Remove. Utilice el método RemoveAt para quitar el grupo en un índice determinado.

No se puede agregar a la colección más de una vez un ListViewGroup. Para cambiar de posición un grupo dentro de la colección, se debe quitar primero de la colección y, a continuación, insertarlo en la ubicación deseada. Utilice el método Contains para determinar si un grupo determinado ya está en la colección. Para recuperar el índice de un grupo dentro de la colección, utilice el método IndexOf. Puede obtener o establecer el grupo en un índice determinado con el indizador Item.

Utilice el método AddRange para agregar varios grupos a la colección. Puede agregar varios grupos como una matriz de grupos o como un ListViewGroupCollection que se recupera mediante la propiedad ListView.Groups de otro control ListView. Utilice el método Clear para quitar todos los grupos de la colección.

NotaNota:

Los métodos Remove, RemoveAty Clear quitan grupos de la colección, pero no quitan ningún elemento del control ListView. Si no hay ningún grupo en la colección ListView.Groups, la característica de agrupación se desactiva y, normalmente, se muestran todos los elementos del control.

Los métodos AddRange y Clear son útiles cuando desea proporcionar varias maneras de agrupar los elementos en un control ListView. Para ello, cree varias matrices de grupo. Para cambiar la agrupación, utilice primero el método Clear para quitar todos los grupos de la colección, a continuación utilice el método AddRange para agregar la matriz de grupos siguientes que se quiere mostrar.

Utilice el método CopyTo para copiar los grupos de una colección en una matriz compatible que se inicie en un índice especificado. Esto es útil, por ejemplo, cuando desea ordenar los grupos de la colección utilizando el método System.Array.Sort. Para ello, copie los grupos en una matriz compatible y, a continuación, ordene la matriz. Después, utilice el método Clear para quitar todos los grupos de la colección y a continuación utilice el método AddRange para volver a agregar la matriz ordenada a la colección.

Utilice la propiedad Count para determinar cuántos grupos hay en la colección. Para recorrer en iteración la colección, utilice el IEnumerator devuelto desde el método GetEnumerator.

NotaNota:

Esta característica de agrupación sólo está disponible en Windows XP y en la familia Windows Server 2003 cuando la aplicación llama al método Application.EnableVisualStyles. En los sistemas operativos anteriores, se omitirá cualquier código relacionado con grupos y los grupos no aparecerán. Como resultado, cualquier código que dependa de la característica de agrupación podría no funcionar correctamente. Quizás desee incluir una prueba que determine si está disponible la característica de agrupación y proporcionar funcionalidad alternativa cuando no lo está. Por ejemplo, quizás desee proporcionar una ordenación alternativa al ejecutar sistemas operativos que no admiten la ordenación por grupo.

La misma biblioteca que proporciona la función de temas del sistema operativo ofrece la función de marca de inserción. Para comprobar la disponibilidad de esta biblioteca, llame a la sobrecarga del método FeatureSupport.IsPresent(Object) y pase el valor OSFeature.Themes.

En el siguiente ejemplo se muestra cómo utilizar la característica de agrupación de ListView para organizar los elementos por el valor de los subelementos en la vista de detalles. Esta forma de agrupamiento es similar al agrupamiento utilizado en el Explorador de Windows. En el ejemplo, los grupos se crean dinámicamente. En cada columna de subelementos, se crea un grupo para cada valor de subelemento único. En la columna primaria de elementos, se crea un grupo para cada letra inicial única. Al hacer clic en el encabezado de una columna, se ordenan los elementos en los grupos creados para esa columna. Si se vuelve a hacer clic en el mismo encabezado de columna, se invierte el orden de los grupos.

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

}

import System.*;
import System.Collections.*;
import System.Windows.Forms.*;

public class ListViewGroupsExample extends Form
{
    private ListView myListView;
    private boolean isRunningXPOrLater = false;

    // Declare a Hashtable array in which to store the groups.
    private Hashtable groupTables[];

    // Declare a variable to store the current grouping column.
    private int groupColumn = 0;

    public ListViewGroupsExample()
    {
        // Initialize myListView.
        myListView = new ListView();
        myListView.set_Dock(DockStyle.Fill);
        myListView.set_View(View.Details);
        myListView.set_Sorting(SortOrder.Ascending);
        // Create and initialize column headers for myListView.
        ColumnHeader columnHeader0 = new ColumnHeader();
        columnHeader0.set_Text("Title");
        columnHeader0.set_Width(-1);
        ColumnHeader columnHeader1 = new ColumnHeader();
        columnHeader1.set_Text("Author");
        columnHeader1.set_Width(-1);
        ColumnHeader columnHeader2 = new ColumnHeader();
        columnHeader2.set_Text("Year");
        columnHeader2.set_Width(-1);
        // Add the column headers to myListView.
        myListView.get_Columns().AddRange(new ColumnHeader[] { 
            columnHeader0, columnHeader1, columnHeader2 });
        // Add a handler for the ColumnClick event.
        myListView.add_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.get_Items().AddRange(new ListViewItem[] { 
            item0, item1, item2, item3, item4, item5 });
        // Determine whether Windows XP or a later 
        // operating system is present.
        if (System.Environment.get_OSVersion().get_Version().get_Major() > 5 
            || (System.Environment.get_OSVersion().get_Version().get_Major() 
            == 5 && System.Environment.get_OSVersion().get_Version().get_Minor() 
            >= 1)) {
            isRunningXPOrLater = true;
        }

        if (isRunningXPOrLater) {
            // Create the groupsTable array and populate it with one 
            // hash table for each column.
            groupTables = new Hashtable[myListView.get_Columns().get_Count()];
            for (int column = 0; column < myListView.get_Columns().get_Count(); 
                column++) {
                // Create a hash table containing all the groups 
                // needed for a single column.
                groupTables.set_Item(column, CreateGroupsTable(column));
            }
            // Start with the groups created for the Title column.
            SetGroups(0);
        }
        // Initialize the form.
        this.get_Controls().Add(myListView);
        this.set_Size(new System.Drawing.Size(550, 330));
        this.set_Text("ListView Groups Example");
    } //ListViewGroupsExample

    /** @attribute STAThread()
     */
    public static void main(String[] args)
    {
        Application.Run(new ListViewGroupsExample());
    } //main

    // 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.get_Sorting().Equals(SortOrder.Descending) 
            || (isRunningXPOrLater && e.get_Column() != groupColumn)) {
            myListView.set_Sorting(SortOrder.Ascending);
        }
        else {
            myListView.set_Sorting(SortOrder.Descending);
        }
        groupColumn = e.get_Column();
        // Set the groups to those created for the clicked column.
        if (isRunningXPOrLater)
        {
            SetGroups(e.get_Column());
        }
    } //myListView_ColumnClick

    // Sets myListView to the groups created for the specified column.
    private void SetGroups(int column)
    {
        // Remove the current groups.
        myListView.get_Groups().Clear();
        // Retrieve the hash table corresponding to the column.
        Hashtable groups = (Hashtable)groupTables.get_Item(column);
        // Iterate through the items in myListView, assigning each 
        // one to the appropriate group.
        for (int iCtr = 0; iCtr < myListView.get_Items().get_Count(); iCtr++) {
            ListViewItem item = myListView.get_Items().get_Item(iCtr);
            // Retrieve the subitem text corresponding to the column.
            String subItemText = item.get_SubItems().get_Item(column).get_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.set_Group((ListViewGroup)(groups.get_Item(subItemText)));
        }
        // Copy the groups for the column to an array.
        ListViewGroup groupsArray[] = new ListViewGroup[groups.get_Count()];
        groups.get_Values().CopyTo(groupsArray, 0);
        // Sort the groups and add them to myListView.
        Array.Sort(groupsArray, new ListViewGroupSorter(
            myListView.get_Sorting()));
        myListView.get_Groups().AddRange(groupsArray);
    } //SetGroups

    // 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.
        for (int iCtr = 0; iCtr < myListView.get_Items().get_Count(); iCtr++) {
            ListViewItem item = myListView.get_Items().get_Item(iCtr);
            // Retrieve the text value for the column.
            String subItemText = item.get_SubItems().get_Item(column).get_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;
    } //CreateGroupsTable

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

        // Stores the sort order.
        public ListViewGroupSorter(SortOrder theOrder)
        {
            order = theOrder;
        } //ListViewGroupSorter

        // 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).get_Header(), 
                ((ListViewGroup)y).get_Header());
            if (order.Equals(SortOrder.Ascending)) {
                return result;
            }
            else {
                return -result;
            }
        } //Compare
    } //ListViewGroupSorter
} //ListViewGroupsExample 

System.Object
  System.Windows.Forms.ListViewGroupCollection

Los miembros estáticos públicos (Shared en Visual Basic) de este tipo son seguros para la ejecución de subprocesos. No se garantiza que los miembros de instancias sean seguros para la ejecución de subprocesos.

Windows 98, Windows 2000 Service Pack 4, Windows CE, Windows Millennium, Windows Mobile para Pocket PC, Windows Mobile para Smartphone, Windows Server 2003, Windows XP Media Center, Windows XP Professional x64, Windows XP SP2, Windows XP Starter

Microsoft .NET Framework 3.0 es compatible con Windows Vista, Microsoft Windows XP SP2 y Windows Server 2003 SP1.

.NET Framework

Compatible con: 3.0, 2.0
Mostrar:
© 2015 Microsoft