ListView – 插入项目
我以前从未使用过ListView控件,并尝试在运行时以编程方式插入项目。
我有一个名为Title的列。 一旦用户从FolderBrowserDialog中选择了一个路径。 我需要能够获取SelectedPath中文件的所有名称,并将文件名称添加为Title列中的项目。 任何人都可以帮我这样做吗?
谢谢
我认为最好的方法是使用FileInfo而不是将FilePaths作为字符串。 这样,如果需要,您可以在ListView中显示有关该文件的更多信息(例如,您将View设置为详细信息,然后您可以为FileInfo(Size等)添加组)。
您可以通过向列表视图添加组然后使用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); }
显然你不必使用group和SubItems,没有它们仍然可以正常工作(只需删除SubItems部分)。
试试这段代码:
string[] filePaths = Directory.GetFiles("c:\\MyDir\\"); foreach (string str in filePaths) { ListViewItem lvi = new ListViewItem(str); ListView1.Items.Add(lvi) }
您使用的是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); }
-
Directory.GetFiles
-
ListView
示例
您拥有的一个选项是使用绑定数据网格。 但是,它取决于您要处理的数据量。
这是怎么做的:
在视图上创建一个带有’title’列的DataGrid,然后将特定列绑定到DataField(也称为标题)。
加载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); }
然后在渲染数据网格时,您只需说:
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();