我從來沒有使用ListView控件,並試圖以編程方式在運行時插入項目。ListView - 插入項目
我有一個名爲Title的列。一旦用戶從FolderBrowserDialog中選擇了一條路徑。我需要能夠獲取SelectedPath中所有文件的名稱,並將文件的名稱添加爲Title列中的項目。任何人都可以幫助我做到這一點?
謝謝
我從來沒有使用ListView控件,並試圖以編程方式在運行時插入項目。ListView - 插入項目
我有一個名爲Title的列。一旦用戶從FolderBrowserDialog中選擇了一條路徑。我需要能夠獲取SelectedPath中所有文件的名稱,並將文件的名稱添加爲Title列中的項目。任何人都可以幫助我做到這一點?
謝謝
我認爲這樣做的最好方法是使用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部分)。
試試這個代碼:
string[] filePaths = Directory.GetFiles("c:\\MyDir\\");
foreach (string str in filePaths)
{
ListViewItem lvi = new ListViewItem(str);
ListView1.Items.Add(lvi)
}
優秀。非常感謝Iordan,非常感謝。 :o) – 2009-08-11 14:56:28
是否使用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);
}
一個你必須使用綁定數據網格的選項。但是,這取決於您想要處理的數據量。
這是怎麼做:
在您的視圖中創建一個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();
這將這樣的伎倆。但是如果這個解決方案更有意義,那麼你的數據網格有多個簡單的列。
如果您剛開始使用.NET ListView,則可以使用ObjectListView(.NET WinForms ListView的開源包裝器)爲您節省很多麻煩。它解決了你將遇到的大多數問題和挫折。
最瑣碎的事情是,當您單擊標題時,它會自動處理排序行,這是您必須在標準ListView上爲自己編寫的內容。
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();
哦,謝謝!這是一個守門員:D – 2009-08-17 08:46:12