【问题标题】:select row from winforms listview从 winforms 列表视图中选择行
【发布时间】:2013-07-17 07:53:37
【问题描述】:

我有一个列表视图,其中填充了数据列表。现在我想选择所需的行并单击按钮以识别要从集合中删除的项目。

问题是如何从列表视图中识别选定的行?

private void buttonDelete_Click(object sender, EventArgs e)
{
    //selected data is of custom type MyData
    var selected = (MyData)....?
}

谢谢

【问题讨论】:

    标签: c# .net winforms


    【解决方案1】:

    这应该可行

      private void buttonDelete_Click(object sender, EventArgs e)
        {
            //selected data is of custom type MyData
            var selected = yourListView.SelectedItems.First();
        }
    

    【讨论】:

      【解决方案2】:

      添加到@Zaphod 的答案并使其更加健壮:

      private void buttonDelete_Click(object sender, EventArgs e)
      {
          if (yourListView.SelectedItems.Any())
          {
               //selected data is of custom type MyData
               var selected = yourListView.SelectedItems.First();
          }
      }
      

      您可以使用.Count > 0 代替.Any().SelectedItems[0] 代替.First()。无论您发现什么更具可读性/可维护性。

      【讨论】:

      • 确实如此。我什至忘记了答案中的 .Frst() 。
      • 为什么我不能将选择项转换为我的自定义数据类型? var sel = (MyData)listView.SelectedItems[0];
      • 因为 .SelectedItems 是 ListViewItem 的集合。如果要将自定义数据类型与列表视图项相关联,可以使用 Tag 属性。然后 (MyData)listView.SelectedItems[0].Tag 会给你你想要的。
      【解决方案3】:

      老派答案:) 没有任何 LINQ 语句

      if(yourListView.SelectedItems.Count > 0)
      {
        var item = yourListView.SelectedItems[0];
      }
      

      【讨论】:

        【解决方案4】:

        我认为您不必为删除操作使用强制转换,只需像这样删除所有选定的索引:

        private void buttonDelete_Click(object sender, EventArgs e){
            for (int i = listView1.SelectedIndices.Count - 1; i >= 0; i--)                
                 listView1.Items.RemoveAt(listView1.SelectedIndices[i]);
        }
        

        或更简单地说:

        private void buttonDelete_Click(object sender, EventArgs e){
            foreach(ListViewItem item in listView1.SelectedItems)                
                 listView1.Items.Remove(item);
        }
        

        如您所见,所选项目的类型为ListViewItem,您可以通过Text 属性(如果数据是字符串)或Tag 属性将数据绑定到该项目。不明白你的CustomData是什么,是继承ListViewItem的类型吗?

        【讨论】:

          【解决方案5】:

          你应该这样做

            private void buttonDelete_Click(object sender, EventArgs e)
            {        
          
              if (yourListView.SelectedItems.Any())
             {
               //selected data is of custom type MyData
               var selected = (MyData)yourListView.SelectedItems[0];
              YourCollection.Remove(selected);
             }
            }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2012-04-04
            • 1970-01-01
            • 1970-01-01
            • 2018-09-19
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多