2012-07-03 12 views
11

Sto imparando come utilizzare listView in un windowsForm e ho alcuni problemi che spero di risolvere qui. La prima cosa è quando Sto creando le colonne con il codice qui sotto:Creazione di colonne in listView e aggiunta di articoli

private void initListView() 
    { 
     // Add columns 
     lvRegAnimals.Columns.Add("Id", -3,HorizontalAlignment.Left); 
     lvRegAnimals.Columns.Add("Name", -3, HorizontalAlignment.Left); 
     lvRegAnimals.Columns.Add("Age", -3, HorizontalAlignment.Left); 
    } 

Quando eseguo il programma, il nome delle colonne non sono visibili, sono tutti in un angolo a sinistra , e devo "trascinarli" per poter leggere il testo. Cosa ho fatto di sbagliato?

Infine, mi chiedo come aggiungere elementi alle colonne. Devo innanzitutto creare un oggetto come

ListViewItem item1 = new ListViewItem(???); 
item1.SubItems.Add("text"); 

è ogni ListViewItem oggetti una colonna o di una riga? Come posso aggiungere righe di informazioni? Preciso qualche aiuto! Grazie!

risposta

31

Il tuo primo problema è che stai passando -3 al secondo parametro di Columns.Add. Deve essere -2 per poter ridimensionare automaticamente la colonna. Fonte: http://msdn.microsoft.com/en-us/library/system.windows.forms.listview.columns.aspx (sguardo ai commenti sulla esempio di codice in basso)

private void initListView() 
{ 
    // Add columns 
    lvRegAnimals.Columns.Add("Id", -2,HorizontalAlignment.Left); 
    lvRegAnimals.Columns.Add("Name", -2, HorizontalAlignment.Left); 
    lvRegAnimals.Columns.Add("Age", -2, HorizontalAlignment.Left); 
} 

È inoltre possibile utilizzare l'altro di sovraccarico, Aggiungi (stringa). Per esempio:

lvRegAnimals.Columns.Add("Id"); 
lvRegAnimals.Columns.Add("Name"); 
lvRegAnimals.Columns.Add("Age"); 

di riferimento per ulteriori sovraccarichi: http://msdn.microsoft.com/en-us/library/system.windows.forms.listview.columnheadercollection.aspx

In secondo luogo, per aggiungere elementi alla ListView, è necessario creare istanze di ListViewItem e aggiungerli alla Items del ListView. Dovrai usare il costruttore string [].

var item1 = new ListViewItem(new[] {"id123", "Tom", "24"}); 
var item2 = new ListViewItem(new[] {person.Id, person.Name, person.Age}); 
lvRegAnimals.Items.Add(item1); 
lvRegAnimals.Items.Add(item2); 

È inoltre possibile memorizzare oggetti nella proprietà Tag dell'oggetto.

item2.Tag = person; 

E poi si può estrarre

var person = item2.Tag as Person; 

Fatemi sapere se avete domande e spero che questo aiuta!

+0

Grazie per l'aiuto! Ho intenzione di provare questo codice più tardi o domani. Forse potrei tornare da te se avessi qualche domanda al riguardo. –

+0

Non ha alcun costruttore di overload per string stringhe di tipo implicitamente tipizzato? – Charlie

+1

@Charlie, sto assumendo che tu ti stia riferendo ai costruttori di overload di ListViewItem? Se si desidera creare un ListViewItem con SubItems dal costruttore, è possibile utilizzare l'overload string [] o l'overload ListViewSubItem []. Sto usando new [] invece di new string [] perché C# può inferire automaticamente il tipo (che in questo caso è una stringa). Vedere https://msdn.microsoft.com/en-us/library/system.windows.forms.listviewitem.listviewitem(v=vs.110).aspx – Tom

24

Non ho visto nessuno rispondere correttamente. Quindi lo sto postando qui. Per visualizzare le colonne è necessario specificare la seguente riga.

lvRegAnimals.View = View.Details; 

E quindi aggiungere le colonne dopo.

lvRegAnimals.Columns.Add("Id", -2, HorizontalAlignment.Left); 
lvRegAnimals.Columns.Add("Name", -2, HorizontalAlignment.Left); 
lvRegAnimals.Columns.Add("Age", -2, HorizontalAlignment.Left); 

Spero che questo aiuti chiunque altro cerchi questa risposta in futuro.

+3

Questa dovrebbe essere la risposta giusta – lzt

3

È necessario impostare proprietà per il controllo:

listView1.View = View.Details; 
+0

cosa fa questa proprietà>/ –

+0

* cosa fa questa proprietà * - ListViews sono usati nello standard "Esplora risorse", quindi immagina ** Dettagli vista ** nella cartella standard/file browser . –

+0

Mostrerà la struttura della griglia. Pls. provalo tu stesso –

0
  listView1.View = View.Details; 
     listView1.Columns.Add("Target No.", 83, HorizontalAlignment.Center); 
     listView1.Columns.Add(" Range ", 100, HorizontalAlignment.Center); 
     listView1.Columns.Add(" Azimuth ", 100, HorizontalAlignment.Center);  

ho avuto anche lo stesso problema .. mi trascino colonna a sinistra .. ma ora ok .. Quindi diciamo che ho 283 * 196 dimensione di listview ..... Abbiamo dichiarato nella larghezza della colonna -2 per larghezza automatica. Per il montaggio in listview, possiamo dividere la larghezza listview in 3 parti (83,100,100) ...

+0

Non inserire solo il codice, è necessario aggiungere una spiegazione. – reformed

Problemi correlati