2012-03-16 4 views
17

Attualmente sono alle prese con la GUI della mia applicazione. Ho difficoltà a capire se ListBox o ListView è più "adatto" per la rappresentazione multi-colonna di dati.ListView vs. ListBox per l'utilizzo di più colonne

Preferisco il codice "pulito" che non è troppo confuso per capire, come il codice di spaghetti e metodi di hacking possono portare a confusione.

In che modo ListBox e ListView gestiscono più colonne?

+2

Che ne dici di un 'DataGridView'? –

+0

@BryanCrosby, sto lavorando con i dati dell'elenco adesso. Comprendo che DataGridView è adatto per i dati del database. – JavaCake

+0

Hai detto di avere una rappresentazione a più colonne. Questo è un tavolo, ed è per questo che l'ho raccomandato. Qual è la tua struttura dati? –

risposta

11

Non c'è nulla di sbagliato in un DataGridView in questo scenario.

Esempio:

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

Una funzione per caricare i dati al 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; 
} 

Naturalmente, da qui le cose possono diventare più complicate, ma se volete semplicemente per visualizzare i dati in un moda tabulare ... è piuttosto semplice.

+1

Perfetto. Esattamente quello che stavo cercando. Dovevo solo aggiungere una riga di codice che inizializzava l'origine dati e faceva la magia. – JavaCake

+1

È possibile escludere qualsiasi colonna o cambiare l'ordine di essi? – JavaCake

+2

@JavaCake: è possibile accedere alle colonne con il loro indice o ordinale. 'DataGridView.Columns [0]', per esempio. Esiste una proprietà 'DisplayIndex' che controlla come possono essere visualizzati. Esiste anche una proprietà 'Visible' che controlla la visibilità. –

2

ListView è molto meglio per la rappresentazione multi-colonna di dati. Tuttavia sembra che si ottenga codice più complicato/brutto di un semplice ListBox.

Ancora molto meglio per molte ragioni, colonne ridimensionabili e tutto il resto.

Non credo ListBox ha più colonne in modo che avrebbe dovuto incidere qualcosa di brutto in.

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

+0

Tutti gli esempi che ho trovato su entrambi i tipi finiscono in un codice un po 'disordinato. Ma come dici tu il ListView sembra molto più adatto. Puoi dare un codenippet su un ListView a più colonne? Grazie. – JavaCake

+0

Il controllo ListBox supporta certamente [più colonne] (http://msdn.microsoft.com/en-us/library/system.windows.forms.listbox.multicolumn.aspx). –

+0

"Un ListBox multicolonna posiziona gli elementi in tutte le colonne necessarie per rendere inutile lo scorrimento verticale." Non penso che sia così utile. – Haedrian

4

check this out

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

Anche se listbox viene utilizzato per una singola colonna e listview è usata per mutlicolumn, la risposta è che tutto dipende.

A volte potrebbe essere necessario un elenco a più colonne in cui è necessario aggiungere diversi tipi di bambini. Non è possibile associarli usando listview, quindi è meglio usare listbox in tali scenari. Ma se vuoi ordinarli usando l'intestazione, usa listview perché è semplice.

In conclusione, direi se hai solo dati multi colonna e niente di meglio da usare listview else se vuoi fare cose fantasiose come bottoni, treeview, expander ecc. ListBox è davvero bello.

Grazie, Omkar

4

Una DataGridView è bello se si vuole essere in grado di modificare i dati direttamente dalla rete, come un foglio di calcolo. Una modalità listview in dettaglio è ottima per la semplice presentazione di elenchi di colonne di dati. Un DataGridView sarà anche più facile da ordinare, per quanto ne so.

Generalmente faccio qualcosa di simile:

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

Le colonne dovranno sono stati definiti nella finestra di progettazione, inclusi testi colonna e la larghezza delle colonne.

Con il Tag = articolo; parte si sarà in grado di accedere all'oggetto selezionato con:

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

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

    // do something with selectedItem