之前我从未使用过ListView控件,并尝试在运行时以编程方式插入项目。
我有一个名为Title的列。一旦用户从FolderBrowserDialog中选择了一个路径。我需要能够获取SelectedPath中文件的所有名称,并将文件名称添加为Title列中的项目。有人可以帮我这么做吗?
谢谢
答案 0 :(得分:3)
试试这段代码:
string[] filePaths = Directory.GetFiles("c:\\MyDir\\");
foreach (string str in filePaths)
{
ListViewItem lvi = new ListViewItem(str);
ListView1.Items.Add(lvi)
}
答案 1 :(得分:3)
我认为最好的方法是使用FileInfo而不是将FilePaths作为字符串。这样,如果需要,您可以在ListView中显示有关该文件的更多信息(例如,您将视图设置为详细信息,然后您可以为FileInfo(大小等)添加组)。
您可以通过向列表视图添加组然后使用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部分)。
答案 2 :(得分: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);
}
答案 3 :(得分:0)
您拥有的其中一个选项是使用绑定数据网格。但是,它取决于您要处理的数据量。
这是怎么做的:
在视图上创建一个带有'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();
这样就可以了。但是,如果这个解决方案更有意义,那么您的数据网格就会有多个简单的列。
答案 4 :(得分:0)
如果您刚开始使用.NET ListView,可以使用ObjectListView(.NET WinForms ListView的开源包装器)来节省很多麻烦。它解决了您将遇到的大多数问题和挫折。
最简单的是,它会在您单击标题时自动处理排序行,您必须在标准ListView上自行编写。
答案 5 :(得分:-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();