将所选项目转换回自定义数据类型winforms

本文关键字:定义数据类型 winforms 转换 选项 项目 | 更新日期: 2023-09-27 18:23:36

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

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

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

再次,如何将所选项目从listview转换为CustomDataType

更新:CustomType是ArticleDetails,它具有Articleint Quantity属性。并且我想在从列表视图中删除所选项目之前访问CCD_ 6属性,因为我想减小CCD_。

更新2

列表视图是这样填充的

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;

将所选项目转换回自定义数据类型winforms

尝试

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

我认为应该解释瑜伽士的答案:当您转换(CustomDataType)x时,如果x为null或不是CustomDataType,则会出现异常。

当您执行x as CustomDataType时,如果x为null或不是CustomDataType,您只会得到null,然后检查if(selected != null)以查看转换是否通过。

但是,您应该始终检查

listview1.SelectedItems != null && listview1.SelectedItems.Count > 0