2009-08-11 95 views
1

我從來沒有使用ListView控件,並試圖以編程方式在運行時插入項目。ListView - 插入項目

我有一個名爲Title的列。一旦用戶從FolderBrowserDialog中選擇了一條路徑。我需要能夠獲取SelectedPath中所有文件的名稱,並將文件的名稱添加爲Title列中的項目。任何人都可以幫助我做到這一點?

謝謝

回答

3

我認爲這樣做的最好方法是使用FileInfo,而不是像獲取字符串一樣獲取FilePath。這樣,如果需要,您可以在ListView中顯示更多關於該文件的信息(比如說,您可以將View設置爲詳細的,然後可以爲FileInfo(Size等)添加組)。

你會通過添加組列表視圖,然後用添加子項目的項目做這樣的:

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

很明顯,你不必使用組和子項,這會仍正常工作沒有他們(只是刪除SubItems部分)。

+0

哦,謝謝!這是一個守門員:D – 2009-08-17 08:46:12

3

試試這個代碼:

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

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

優秀。非常感謝Iordan,非常感謝。 :o) – 2009-08-11 14:56:28

0

是否使用View.Details模式?聽起來像是這樣,因爲你提到了專欄。如果是這樣,它看起來就像這樣:

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

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

一個你必須使用綁定數據網格的選項。但是,這取決於您想要處理的數據量。

這是怎麼做:

在您的視圖中創建一個DataGrid與「標題」列,然後在特定的列綁定到數據字段(也稱謂)。

加載DataGrid時,您可以創建一個新的DataTable,其中包含填充文件名稱的'title'列。


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

然後渲染你的DataGrid,當你只是簡單地說:


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

這將這樣的伎倆。但是如果這個解決方案更有意義,那麼你的數據網格有多個簡單的列。

0

如果您剛開始使用.NET ListView,則可以使用ObjectListView(.NET WinForms ListView的開源包裝器)爲您節省很多麻煩。它解決了你將遇到的大多數問題和挫折。

最瑣碎的事情是,當您單擊標題時,它會自動處理排序行,這是您必須在標準ListView上爲自己編寫的內容。

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