ListView - Вставка элементов - PullRequest
       4

ListView - Вставка элементов

1 голос
/ 11 августа 2009

Я никогда раньше не использовал элемент управления ListView и пытаюсь программно вставить элементы во время выполнения.

У меня есть столбец с именем Title. И как только пользователь выбрал путь из FolderBrowserDialog. Мне нужно иметь возможность захватить все имена файлов внутри SelectedPath и добавить имена файлов в качестве элементов внутри столбца заголовка. Кто-нибудь может помочь мне сделать это?

Спасибо

Ответы [ 6 ]

3 голосов
/ 17 августа 2009

Я думаю, что лучший способ сделать это - использовать FileInfo вместо того, чтобы получать FilePath как строки. Таким образом, вы можете отобразить дополнительную информацию о файле в ListView, если это необходимо (например, если вы задали View как подробный, тогда вы можете добавить группы для 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);
  }

Очевидно, что вам не нужно использовать группы и подэлементы, без них все равно будет работать (просто удалите часть подэлементов).

3 голосов
/ 11 августа 2009

Попробуйте этот код:

string[] filePaths = Directory.GetFiles("c:\\MyDir\\");

foreach (string str in filePaths)
{
    ListViewItem lvi = new ListViewItem(str);
    ListView1.Items.Add(lvi)
}
0 голосов
/ 23 марта 2011
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();
0 голосов
/ 12 августа 2009

Если вы только начинаете работу с .NET ListView, вы можете сэкономить массу хлопот, используя ObjectListView (оболочка с открытым исходным кодом для .NET WinForms ListView). Это решает большинство проблем и разочарований, с которыми вы столкнетесь.

Наиболее просто, он автоматически обрабатывает сортировку строк, когда вы нажимаете на заголовки, что вы должны написать для себя в стандартном ListView.

0 голосов
/ 11 августа 2009

Один из вариантов, который у вас есть, - использование сетки данных с привязками. Однако это зависит от объема данных, которые вы хотите обработать.

Вот как это делается:

В вашем представлении создайте DataGrid со столбцом 'title' и затем привяжите определенный столбец к DataField (также title).

При загрузке 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();

Это сработает. Но если это решение будет более целесообразным, в вашей сетке данных будет более одного простого столбца.

0 голосов
/ 11 августа 2009

Используете ли вы режим 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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...