从子项具有多个元素的“数据集”行创建ListViewItem
本文关键字:数据集 ListViewItem 创建 元素 | 更新日期: 2023-09-27 18:25:20
我正在使用c#将XML数据库读取到Visual Studio中的数据集中。一旦我有了数据集,我就会从数据集中的每一行创建一个listviewitem,并将其放在listview中。但是,XML文档看起来像这个
<?xml version="1.0" encoding="utf-8"?>
<movielist>
<movie>
<title>Adventures of Casanova </title>
<year>1948</year>
<length>83 min</length>
<certification>Approved</certification>
<director>Roberto Gavaldn</director>
<rating>1</rating>
<genre>Action</genre>
<genre>Adventure</genre>
<genre>History</genre>
<genre>Romance</genre>
<genre>War</genre>
<actor>Arturo de C rdova</actor>
<actor>Lucille Bremer</actor>
<actor>Turhan Bey</actor>
<actor>John Sutton</actor>
<actor>George Tobias</actor>
</movie>
</movielist>
我在将演员和类型子项添加到列表视图项中时遇到问题,因为该子项中包含多个元素。
到目前为止,我的代码看起来像这个
foreach (DataRow dr in ds.Tables["movie"].Rows)
{
item = new ListViewItem(new string[]
{
dr["title"].ToString(),
dr["year"].ToString(),
dr["rating"].ToString(),
dr["actor"].ToString(),
dr["director"].ToString(),
dr["genre"].ToString(),
dr["length"].ToString(),
});
listView1.Items.Add(item);
}
}
但我在演员和类型价值观上犯了错误。如何在listviewitems子项中包含多个元素?
看起来XML解析器想要从该模式在数据集中创建三个表。在这样做的过程中,它为你创造了关键的关系。您只需要知道如何从集合中的各个数据表访问它们。
使用一点linq来帮助我们将演员和流派的列表连接在一行中,你可以试试这个:
foreach (DataRow dr in ds.Tables["movie"].Rows)
{
item = new ListViewItem(new string[]
{
dr["title"].ToString(),
dr["year"].ToString(),
dr["rating"].ToString(),
string.Join(", ", dr.GetChildRows("movie_actor").Select(a => a[0])),
dr["director"].ToString(),
string.Join(", ", dr.GetChildRows("movie_genre").Select(a => a[0])),
dr["length"].ToString(),
});
listView1.Items.Add(item);
}
这做了三件事。它获取名为"movie_aactor"answers"movie_type"的关系的子记录,选择列表中的第一列,然后将它们格式化为用逗号分隔的字符串。
最后一点,我不确定如果有缺少演员或类型的电影记录,这种串联是否会失败。在这种情况下,您可能需要稍微修改构建每个ListViewItem的方式。