2012-03-16 33 views
17

Actualmente estoy luchando con la GUI de mi aplicación. Me es difícil descifrar si el ListBox o ListView es más "adecuado" para la representación de datos de múltiples columnas.ListView frente a ListBox para uso de columna múltiple

Prefiero el código "limpio" que no es muy confuso de entender, ya que el código de spaghetti y los métodos de piratería pueden generar confusión.

¿Cómo manejan ListBox y ListView múltiples columnas?

+2

¿Qué tal un 'DataGridView'? –

+0

@BryanCrosby, estoy trabajando con datos de la lista en este momento. Entiendo que DataGridView es apto para datos de base de datos. – JavaCake

+0

Dijiste que tienes representación de múltiples columnas. Esa es una mesa, por eso lo recomendé. ¿Cuál es tu estructura de datos? –

Respuesta

11

Ciertamente no hay nada malo con un DataGridView en este escenario.

muestra:

class Car 
{ 
    public string Make { get; set; } 
    public string Model { get; set; } 
    public int Year { get; set; } 
} 

Una función para cargar los datos a la DataGridView

private void LoadData() 
{ 
    List<Car> cars = new List<Car>() 
    { 
     new Car() { Make = "Subaru", Model = "Impreza", Year = 2005 }, 
     new Car() { Make = "Ford", Model = "Mustang", Year = 1984 } 
    }; 

    dataGridView1.DataSource = cars; 
} 

Por supuesto, desde aquí las cosas pueden ser más complicado, pero si simplemente desea mostrar los datos en una la moda tabular ... es bastante simple.

+1

Perfecto. Exactamente lo que estaba buscando. Solo tuve que agregar una línea de código que inicializara el origen de datos e hizo la magia. – JavaCake

+1

¿Es posible excluir cualquier columna o cambiar el orden de las mismas? – JavaCake

+2

@JavaCake: puede acceder a las columnas con su índice nombrado u ordinal. 'DataGridView.Columns [0]', por ejemplo. Hay una propiedad 'DisplayIndex' que controla cómo se pueden mostrar. También hay una propiedad 'Visible' que controla la visibilidad. –

2

ListView es mucho mejor para la representación de datos de varias columnas. Sin embargo, parece obtener un código más complicado/feo que un simple ListBox.

Todavía es mucho mejor por muchas razones, columnas redimensionables y todo eso.

no creo ListBox tiene varias columnas por lo que tendría que cortar algo feo en.

http://www.xtremedotnettalk.com/showthread.php?t=93443

+0

Todos los ejemplos que pude encontrar en ambos tipos terminan en un código algo desordenado. Pero como dices, el ListView parece mucho más apto. ¿Puedes dar una codensippet en un ListView multicolumna? Gracias. – JavaCake

+0

El control ListBox ciertamente admite [columnas múltiples] (http://msdn.microsoft.com/en-us/library/system.windows.forms.listbox.multicolumn.aspx). –

+0

"Un ListBox multicolumna coloca elementos en tantas columnas como sean necesarias para hacer innecesario el desplazamiento vertical". No creo que sea tan útil. – Haedrian

4

mira esto

https://stackoverflow.com/a/227355/988830

Aunque cuadro de lista se utiliza para Una sola columna y una vista de lista se usan para mutlicolumn, la respuesta es que todo depende.

A veces puede necesitar una lista de varias columnas en la que necesite agregar diferentes tipos de elementos secundarios. No puede vincularlos usando listview, por lo que es mejor usar listbox en tales escenarios. Pero si quiere ordenarlos usando encabezado, use listview porque es simple.

En conclusión, diría que si solo tiene datos de varias columnas y nada mejor que usar listview else si quiere hacer cosas extravagantes como botones, vista de árbol, ampliador, etc. ListBox es realmente genial.

Gracias, Omkar

4

Un DataGridView es bueno si usted quiere ser capaz de editar los datos directamente de la red, como una hoja de cálculo. Una vista de lista en modo detallado es excelente para la presentación simple de listas de columnas de datos. Un DataGridView también será más fácil de clasificar, hasta donde yo sé.

Generalmente hago algo como esto:

private void UpdateListView() 
{ 
    mListView.Items.Clear(); 
    foreach (Item item in mItems) 
    { 
     ListViewItem listViewItem = 
     new ListViewItem(item.Value1.ToString()) { Tag = item; } 
     listViewItem.SubItems.Add(item.Value2.ToString()); 
     listViewItem.SubItems.Add(item.Value3.ToString()); 
     mListView.Items.Add(listViewItem); 
    } 
} 

Las columnas tendrán que se han definido en el diseñador, incluyendo texto del encabezado de la columna y ancho de las columnas.

Con Etiqueta = artículo; parte usted será capaz de acceder al objeto seleccionado con:

if (mListView.SelectedIndices.Count <= 0) 
     return; 

    Item selectedItem = mListView.SelectedItems[0].Tag as Item; 
    if (selectedItem == null) 
     return; 

    // do something with selectedItem 
Cuestiones relacionadas