【问题标题】:Cast ListView Items to List<Object> in C#在 C# 中将 ListView 项投射到 List<Object>
【发布时间】:2022-12-04 10:48:35
【问题描述】:

在我从列表视图中删除一个元素后,我需要将当前列表视图项存储在一个新的对象列表中。

这是我的 schema.cs

public class Show
{


public class Show
 {
    public Show() { }
    public int OrdNum { get; set; }
    public DateTime DTshow { get; set; }
    public string values { get; set; }
    public int practice_Number { get; set; }

 }

}




       

问题出在 Takenshows.cs

从 listview 中删除元素后,我不知道如何将 listview 项转换为 List< Show>。

这是我按下并从列表视图中删除现有元素的按钮:

//Takenshows.cs... public List<Show> myShows;

public TakenShows()
{

InitializeComponent();
lvwColumnSorter = new ListViewColumnSorter();
this.listView1.ListViewItemSorter = lvwColumnSorter;
myShows = new List<Show>();

}

private void button1_Click(object sender, EventArgs e)
{

c = 0;

if (listView1.SelectedItems != null)
{

    for (int i = 0; i < listView1.Items.Count; i++)
    {

        if (listView1.Items[i].Selected)
        {

            DialogResult dr = MessageBox.Show("Are you sure you want to remove the element?", "WARNING", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);

            switch (dr)
            {

                case DialogResult.Yes:


                    listView1.Items[i].Remove();

                    i--;

                    for (int j = 0; j < listView1.Items.Count; j++)
                    {
                        c = c + 1;
                        listView1.Items[j].SubItems[0].Text = c.ToString();
                    }

                    f = Int32.Parse(c.ToString());
                    // HERE's THE PROBLEM I need to cast my selected items from list view to object list ( List<Show>) and store those in myShows typed List<Show> Data
                    myShows = listView1.SelectedItems.Cast<ListViewItem>().Select(x =>
                         x.OrdNum, x.DTshow, x.values, x.practice_Number).ToList();

                    var frm2 = Application.OpenForms.OfType<Main>().First();

                    if (frm2 != null)
                    {
                        frm2.devCont();
                        frm2.devcontlist(f);
                    }

                    break;
                case DialogResult.No:
                    break;

        }
      }
    }
  }
}

将不得不做这样的事情:

                          //BUT this code not works
            myShows = listView1.SelectedItems.Cast<ListViewItem>().Select(x =>
                                 x.OrdNum,x.DTshow,x.values,x.practice_Number).ToList();

当我从列表视图项中删除现有元素时,我需要在删除其中一个元素后保留的元素更新列表视图,而不包括我删除的元素。

在我从 listview 中删除现有元素并且它必须存储在 < Show> 列表中后,listview 必须更新。我怎样才能做到这一点?我已经尝试了所有可能的方法,但这几乎是不可能的。

【问题讨论】:

  • 请格式化您的代码,使其变得可读。在 VS Ctrl+E,D 或菜单编辑 > 高级 > 格式化文档中。

标签: c# listview c#-4.0 listviewitem


【解决方案1】:

ListViewItem Class 没有数据模型的 OrdNumDTshow 等属性。在像这样添加新的 ListView 项目时,您可以将模型添加到项目的 Tag 属性

ListViewItem item = new ListViewItem();
item.Tag = show;
item.Text = show.TheText;
//TODO: add subitems
listView1.Items.Add(item);

然后你可以像这样检索数据:

myShows = listView1.SelectedItems.Cast<ListViewItem>()
    .Select(lvi => (Show)lvi.Tag)
    .ToList();

【讨论】:

    猜你喜欢
    • 2013-07-29
    • 2022-07-26
    • 1970-01-01
    • 1970-01-01
    • 2023-03-25
    • 1970-01-01
    • 1970-01-01
    • 2017-11-25
    • 1970-01-01
    相关资源
    最近更新 更多