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