我已经看过许多从数据表填充listview或将数据表转换为listview的例子,但我想要做的就是反过来。
如何将winform listview的内容转换/复制到数据表?
[编辑]
我有一个带有上下文菜单的列表视图,用户可以多选项目并选择一个上下文菜单选项,然后循环选定的项目并提取每个选定的行(列表视图项目)并序列化它,而不是这样做我想要的要将listview转换为数据表,然后将数据表添加到数据集并序列化数据集。
由于
答案 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