2009-08-11 4 views
1

Je n'ai jamais utilisé le contrôle ListView auparavant et j'essaie d'insérer par programmation des éléments au moment de l'exécution.ListView - Insertion d'éléments

J'ai une colonne nommée Title. Et une fois que l'utilisateur a sélectionné un chemin à partir du FolderBrowserDialog. Je dois pouvoir saisir tous les noms des fichiers dans le SelectedPath et ajouter les noms des fichiers en tant qu'éléments dans la colonne Titre. Quelqu'un peut-il m'aider s'il vous plaît à faire cela?

Merci

Répondre

3

Je pense que la meilleure façon de le faire serait d'utiliser FileInfo plutôt que d'obtenir les FilePaths comme des chaînes. De cette façon, vous pouvez afficher plus d'informations sur le fichier dans ListView si nécessaire (par exemple, vous définissez la vue sur détaillée, puis vous pouvez ajouter des groupes pour FileInfo (taille, etc.)).

Vous devez faire cela en ajoutant des groupes à la vue de la liste puis en ajoutant les éléments avec SubItems:

DirectoryInfo directoryInfo = new DirectoryInfo(@"C:\myDir"); 

FileInfo[] files = directoryInfo.GetFiles(); 

foreach(FileInfo fileInfo in files) 
    { 
    ListViewItem newItem = new ListViewItem(); 
    newItem.Text = fileInfo.Name; 
    newItem.SubItems.Add(fileInfo.Length); //Must have a group added to the ListView (called File Size in this example) 
    listView1.Items.Add(newItem); 
    } 

Évidemment, vous ne devez pas utiliser des groupes et SubItems, cela fonctionne toujours bien sans eux (juste supprimer la partie SubItems).

+0

ooh merci pour ça! celui-ci est un gardien: D –

3

Essayez ce code:

string[] filePaths = Directory.GetFiles("c:\\MyDir\\"); 

foreach (string str in filePaths) 
{ 
    ListViewItem lvi = new ListViewItem(str); 
    ListView1.Items.Add(lvi) 
} 
+0

Excellent.Merci beaucoup Iordan, très apprécié. : o) –

0

Êtes-vous en utilisant le mode View.Details? Cela ressemble à ça, puisque vous avez mentionné des colonnes. Si oui, il ressemblera à ceci:

string[] files = Directory.GetFiles(folderBrowser.SelectedPath); 

foreach (string path in paths) { 
    ListViewItem row = new ListViewItem(); 
    row.SubItems.Add(path); 
    YourListView.Items.Add(row); 
} 
0

L'une des options que vous avez utilise une grille de données binded. Cependant, cela dépend de la quantité de données que vous voulez gérer.

Voici comment se fait:

votre point de vue créer une grille de données avec une colonne « titre » et lier ensuite la colonne spécifique à un DataField (également le titre). Lorsque vous chargez le DataGrid, vous pouvez créer un nouveau DataTable avec la colonne 'title' remplie avec les noms des fichiers lors du chargement du DataGrid.


DataTable datatable = new DataTable(); 
DataColumn titleCol = new DataColumn("title", Type.GetType("System.String")); 
datatable.Columns.Add(titleCol); 
foreach(name in names) 
{ 
    DataRow newRow = new DataRow(); 
    newRow["title"] = name; 
    /* 
    * Add the rows you want into your data table 
    */ 

    datatable.Rows.Add(newRow); 
} 

Puis lors du rendu de votre DataGrid vous simplement dit:


dagagrid.DataSource = datatable; 
datagrid.DataBind(); 

Cela fera l'affaire. Mais si cette solution aura plus de sens avec votre grille de données a plus d'une simple colonne.

0

Si vous venez de commencer avec .NET ListView, vous pouvez vous épargner beaucoup de tracas en utilisant ObjectListView (un wrapper open source autour de .NET WinForms ListView). Il résout la plupart des problèmes et des frustrations que vous allez rencontrer.

Plus trivialement, il gère automatiquement le tri des lignes lorsque vous cliquez sur les en-têtes, quelque chose que vous devez écrire vous-même sur un ListView standard.

-1
int i = 0; 

//i = LVPurchase.Items.Count + 1; 
LVPurchase.Items.Add(cmbService.SelectedValue.ToString(), i); 

LVPurchase.Items[LVPurchase.Items.Count - 1].SubItems.Add(cmbService.Text); 
LVPurchase.Items[LVPurchase.Items.Count - 1].SubItems.Add(cmbItem.SelectedValue.ToString()); 
LVPurchase.Items[LVPurchase.Items.Count - 1].SubItems.Add(cmbItem.Text); 
LVPurchase.Items[LVPurchase.Items.Count - 1].SubItems.Add(txtPurchaseQty.Text); 
LVPurchase.Items[LVPurchase.Items.Count - 1].SubItems.Add(txtUnitCostUSD.Text); 
LVPurchase.Items[LVPurchase.Items.Count - 1].SubItems.Add(txtConvRate.Text); 
LVPurchase.Items[LVPurchase.Items.Count - 1].SubItems.Add(txtUnitCostBDT.Text); 
SubTotUSD = Convert.ToDouble(txtPurchaseQty.Text) * Convert.ToDouble(txtUnitCostUSD.Text); 
txtSubTotUSD.Text = SubTotUSD.ToString(); 
SubTotBDT = Convert.ToDouble(txtPurchaseQty.Text) * Convert.ToDouble(txtUnitCostBDT.Text); 
txtSubTotBDT.Text = SubTotBDT.ToString(); 
LVPurchase.Items[LVPurchase.Items.Count - 1].SubItems.Add(txtSubTotUSD.Text); 
LVPurchase.Items[LVPurchase.Items.Count - 1].SubItems.Add(txtSubTotBDT.Text); 

LVPurchase.Items[LVPurchase.Items.Count - 1].SubItems.Add(txtBatch.Text); 
LVPurchase.Items[LVPurchase.Items.Count - 1].SubItems.Add(dtpExpiryDate.Value.ToString()); 

TotalUSD = TotalUSD + SubTotUSD; 
txtTotalUSD.Text = TotalUSD.ToString(); 
TotalBDT = TotalBDT + SubTotBDT; 
txtTotalBDT.Text = TotalBDT.ToString();