我以前从未使用过的ListView控件,我试图以编程方式插入在运行时项目。
我有一个名为列标题。 一旦用户选择了从的FolderBrowserDialog的路径。 我需要能够抓住SelectedPath内的所有文件的名称,并添加文件的名称为标题栏里面的物品。 任何人都可以帮我做到这一点?
谢谢
我以前从未使用过的ListView控件,我试图以编程方式插入在运行时项目。
我有一个名为列标题。 一旦用户选择了从的FolderBrowserDialog的路径。 我需要能够抓住SelectedPath内的所有文件的名称,并添加文件的名称为标题栏里面的物品。 任何人都可以帮我做到这一点?
谢谢
我认为,这样做的最好方法是使用FileInfo的作为,而不是获取文件路径,就像串。 这样一来,如果需要,可以在ListView显示有关该文件的详细信息(例如说你设定的查看到详细的,那么你可以添加组进行的FileInfo(大小等))。
你会通过添加组列表视图,然后添加具有子项目的项目做到这一点:
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);
}
很明显,你不必使用组和子项,这仍然会正常工作没有他们(只是删除子项部分)。
试试这个代码:
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
你们中的一个有选择使用绑定的数据网格。 然而,这取决于要处理的数据量。
这是怎么做:
在您的视图中创建一个DataGrid与“标题”列,然后在特定的列绑定到数据字段(也称谓)。
当加载在DataGrid然后你可以创建一个填充文件名称列“标题”一个新的DataTable。
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();