ListView - 插入项目

时间:2009-08-11 14:41:57

标签: c# listview insert

之前我从未使用过ListView控件,并尝试在运行时以编程方式插入项目。

我有一个名为Title的列。一旦用户从FolderBrowserDialog中选择了一个路径。我需要能够获取SelectedPath中文件的所有名称,并将文件名称添加为Title列中的项目。有人可以帮我这么做吗?

谢谢

6 个答案:

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