1

listview 填充了自定义类型数据类型的列表。现在我想将列表视图中的选定行转换回自定义数据类型,我试过这个

private void btnDelete_Click(object sender, EventArgs e)
{
   var selected = (CustomDataType)listview1.SelectedItems[0];
}

这行不通。这样做的原因是我需要CustomDataType在删除之前使用此 CustomDataType 中的值来减少 totalValue。

同样,如何将所选项目从转换listviewCustomDataType

更新: CustomType 是 ArticleDetails ,它具有Articleint Quantity属性。我想在从列表视图中删除所选项目之前访问Article.Price属性,因为我想降低totalPrice价值。

更新2

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;
4

2 回答 2

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;
}
于 2013-07-17T08:47:10.850 回答
1

我认为应该解释 yogi 的答案:当您进行转换时(CustomDataType)x,如果 x 为 null 或不是 a,CustomDataType那么您将得到异常。

当你这样做时x as CustomDataType,如果 x 为 null 或不是 a CustomDataType,你只会得到 null,然后你检查if(selected != null)转换是否通过。

但是,您应该始终检查

listview1.SelectedItems != null && listview1.SelectedItems.Count > 0
于 2013-07-17T09:00:57.953 回答