listview填充了自定义类型数据类型的列表。现在我想将listview中的选定行转换回自定义数据类型,我试过这个
private void btnDelete_Click(object sender, EventArgs e)
{
var selected = (CustomDataType)listview1.SelectedItems[0];
}
这不起作用。原因是我需要访问CustomDataType
以在删除之前使用此CustomDataType中的值减少totalValue。
同样,如何将所选项目从listview
转换为CustomDataType
?
更新:
CustomType是ArticleDetails,具有Article
和int Quantity
属性。
我希望在从列表视图中删除所选项目之前访问Article.Price
属性,因为我想减少totalPrice
值。
UPDATE2
listview就像这样填充
listview1.Columns.Add("Col1");
listview1.Columns.Add("Col2");
foreach(ArticleDetails ad in myCollection)
{
var row = new ListViewItem(ad.Article.Name);
row.SubItems.Add(ad.Article.Price);
}
listVuew1.View = View.Details;
答案 0 :(得分:1)
尝试
listview1.Columns.Add("Col1");
listview1.Columns.Add("Col2");
foreach(ArticleDetails ad in myCollection)
{
var row = new ListViewItem(ad.Article.Name);
row.Tag = ad; // You can use this to store your object
row.SubItems.Add(ad.Article.Price);
}
listview1.View = View.Details;
private void btnDelete_Click(object sender, EventArgs e)
{
var selected = (CustomDataType)listview1.SelectedItems[0].Tag;
}
答案 1 :(得分:1)
我认为应该解释瑜伽士的答案:
当您进行转换(CustomDataType)x
时,如果x为空或不是CustomDataType
,那么您将获得异常。
当您执行x as CustomDataType
时,如果x为空或不是CustomDataType
,则只会为空,然后检查if(selected != null)
以查看是否已转换。
但是,你应该经常检查
listview1.SelectedItems != null && listview1.SelectedItems.Count > 0