如何将Listview转换为DataTable

时间:2012-06-22 15:52:27

标签: c# vb.net winforms listview datatable

我已经看过许多从数据表填充listview或将数据表转换为listview的例子,但我想要做的就是反过来。

如何将winform listview的内容转换/复制到数据表?

[编辑]

我有一个带有上下文菜单的列表视图,用户可以多选项目并选择一个上下文菜单选项,然后循环选定的项目并提取每个选定的行(列表视图项目)并序列化它,而不是这样做我想要的要将listview转换为数据表,然后将数据表添加到数据集并序列化数据集。

由于

3 个答案:

答案 0 :(得分:3)

类似的东西(完全未经测试)

var listView1 = new ListView();
DataTable table = new DataTable();
foreach (ListViewItem item in listView1.Items)
{
    table.Columns.Add(item.ToString());
    foreach (var it in item.SubItems)
         table.Rows.Add(it.ToString());
 }

答案 1 :(得分:3)

接受的答案对我来说并不合适。这是一个经过测试的替代方案:

public static void FromListView(DataTable table, ListView lvw)
{
   table.Clear();
   var columns = lvw.Columns.Count;

   foreach (ColumnHeader column in lvw.Columns)
      table.Columns.Add(column.Text);

   foreach (ListViewItem item in lvw.Items)
   {
      var cells = new object[columns];
      for (var i = 0; i < columns; i++)
         cells[i] = item.SubItems[i].Text;
      table.Rows.Add(cells);
   }
}

答案 2 :(得分:0)

 DataTable table = new DataTable();

            table.Columns.Add("MODUL", typeof(string));
            table.Columns.Add("ACIKLAMA", typeof(string));
            table.Columns.Add("UZUNLUK", typeof(string));
            table.Columns.Add("GENISLIK", typeof(string));
            table.Columns.Add("MIKTAR", typeof(string));

            for (int i = 0; i < listView2.Items.Count; i++)
            {
                table.Rows.Add(listView2.Items[i].SubItems[0].Text, listView2.Items[i].SubItems[1].Text, listView2.Items[i].SubItems[2].Text, listView2.Items[i].SubItems[3].Text, listView2.Items[i].SubItems[4].Text);
            } //Which Subitems you want to add in the listview