¿Cuál es la mejor manera de encontrar los nombres de las columnas de un control ListView?

Me convertí en una tabla de datos a una Lista mediante un procedimiento que encontré en este foro, pero no puedo hacer es poner la columna de Id de primera, sobre todo porque no todos mis tablas de datos tiene una columna «Id».

Me pueden buscar en la colección de listView.Columnas.ToString (), pero el formato que yo estoy viendo es:

«ColumnHeader: Texto: Id»

que tengo que analizar para encontrar el apropiado nombre de «Id».
Esto no se ve como el espíritu de C#.

También probé: listView.SelectedItems[0].SubItems["Id"]
pero que no se compila.


Ok Aquí está el código completo.
Es el problema exacto que el usuario selecciona una fila en el listView con Courier Nombres e Identificadores, pero también podría ser Ids y Nombres, en ese orden. La forma más rápida de encontrar el Id de la mensajería seleccionado por el cliente sería:

ListViewItem si = listCouriers.SelectedItems[0];
CourierId = si.SubItems["Id"].Text;

pero que no funciona. El codificados de manera que sería este, pero no puedo garantizar que algún día el mal de la columna se utilizará:

ListViewItem si = listCouriers.SelectedItems[0];
CourierId = si.SubItems[1].Text;

Con @HuorSwords método conduce a este no-tan-simple solución, que funciona para mí, pero depende de la suposición razonable de que el orden de las columnas en la ColumnHeaderCollection corresponde a la pantalla de la forma:

ListViewItem si = listCouriers.SelectedItems[0];
string CourierId = null;
int icol = 0;
foreach (ColumnHeader header in listCouriers.Columns)
{
    if (header.Text == "Id")
    {
        CourierId = si.SubItems[icol].Text;
        break;
    }
    icol++;
}
  • NOTA: El OP título explícitamente la pregunta acerca de la Nombre de la propiedad, que está vacío debido a un MS error. Y, sin embargo, ha aceptado una respuesta que sólo da el Texto..
InformationsquelleAutor Roland | 2013-02-20

2 Comentarios

  1. 6

    Como listView.Columns es de tipo ListView.ColumnHeaderCollection, a continuación, contiene ColumnHeader objetos.

    La ColumnHeader.Text contiene el título de la columna, así que usted puede comprobar para columna de hormigón con:

    foreach (ColumnHeader header in listView.Columns)
    {
          if (header.Text == "Id")
          {
               //Do something...
          }
    }

    No sé si es el mejor método, pero no es necesario para analizar los resultados para encontrar «Id» valor…

    ACTUALIZACIÓN

    También, ¿has probado a hacer referencia a él con el String indizador? > listView.Columns["Id"]

    • Gracias! Suena simple, pero yo no había pensado en mirar el ColumnHeaders, mientras que mirando ListViewItem listView.SelectedItems[0]. Pero tuve que cambiar var a ColumnHeader para hacer posible el uso de .Text.
    • La pregunta ahora es si el orden de los .ColumnHeaderCollection es el mismo como lo que veo en el formulario. La mayoría de los lógicamente se, voy a probar esto.
    • Esto no funciona en la cabecera.El texto no existe…
    • encabezado de tipo ‘ColumnHeader» y que, como MSDN, dice, el «Texto» de la propiedad existen para esta clase.
    • Sí me di cuenta de que, más tarde, he cambiado var a ColumnHeader y voilá..
    • a continuación, la respuesta sigue siendo válida. 😉
    • sí, lo es, pero el cambio var a ColumnHeader, por favor.
    • NOTA: El OP título explícitamente preguntar acerca de la Nombre de la propiedad, que está vacío debido a un MS error. Esto sólo da el Texto..

  2. 0

    utilizar este código:

    private ColumnHeader GetColumn(string Text)
    {
        for (int i = 0; i < listView1.Columns.Count; i++)
            for (int j = 0; j < listView1.Items.Count; j++)
                if (listView1.Items[j].SubItems.Count - 1 >= i)
                    if (listView1.Items[j].SubItems[i].Text == Text)
                        return listView1.Columns[i];
        return null;
    }

    acaba de dar elemento de texto a este código y a conseguir todo lo que deseas de una columna.

    Disfrutar 😉

Dejar respuesta

Please enter your comment!
Please enter your name here