我已经看到了许多从数据表填充列表视图或将数据表转换为列表视图的示例,但我正在尝试做的恰恰相反。
如何将 winform listview 的内容转换/复制到数据表?
[编辑]
我有一个带有上下文菜单的列表视图,用户可以在其中多选项目并选择其中一个上下文菜单选项,然后循环选定的项目并提取每个选定的行(列表视图项目)并将其序列化,而不是这样做我想转换listview 到数据表,然后将数据表添加到数据集并序列化数据集。
谢谢
类似的东西(完全未经测试)
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());
}
接受的答案对我来说看起来不正确。这是一个经过测试的替代方案:
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);
}
}
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