Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何删除列表框中选定的表中的多行?_C#_Winforms_Visual Studio_User Interface_Listbox - Fatal编程技术网

C# 如何删除列表框中选定的表中的多行?

C# 如何删除列表框中选定的表中的多行?,c#,winforms,visual-studio,user-interface,listbox,C#,Winforms,Visual Studio,User Interface,Listbox,我有一个表,它的内容显示在列表框中。我想删除用户选择的行。如何知道要删除哪些行以及如何删除 以下是我显示列表框项目的方式: DataSet AllPairs = new DataSet(); AllPairs.ReadXml(PathToPairsXML); listBox1.DataSource = AllPairs.Tables[0]; listBox1.ValueMember = "PAIR_text"; listBox1.DisplayMember = "PAIR_text"; Lis

我有一个表,它的内容显示在列表框中。我想删除用户选择的行。如何知道要删除哪些行以及如何删除

以下是我显示列表框项目的方式:

DataSet AllPairs = new DataSet();
AllPairs.ReadXml(PathToPairsXML);
listBox1.DataSource = AllPairs.Tables[0];
listBox1.ValueMember = "PAIR_text";
listBox1.DisplayMember = "PAIR_text";

Listbox选择属性是多重扩展的。

当您将
数据表
用作
Listbox
数据源
时,项的类型为,因此,您可以使用
DataRowView
Delete
方法,或者使用
DataRowView
Row
属性访问该数据行视图后面的行,并从
数据表中删除该行

string  selectedtext= "";    
foreach (int i in listBox1 .SelectedIndices )
    {
       selectedtext= listBox1.Items[i].ToString ();

       DataRow[] drCollection=AllPairs.Tables[0].Select("PAIR_text='"+selectedtext+"'");

      if (drCollection.Length>0)
                AllPairs.Tables[0].Rows.Remove(drCollection[0]);
    }
您可以使用以下代码:

this.listBox1.SelectedItems.Cast<DataRowView>()
    .ToList()
    .ForEach(item =>
    {
        //item.Delete(); 
        //or
        this.AllPairs.Tables[0].Rows.Remove(item.Row);
    });
this.listBox1.SelectedItems.Cast()
托利斯先生()
.ForEach(项目=>
{
//项目.删除();
//或
this.AllPairs.Tables[0].Rows.Remove(item.Row);
});

这是迄今为止最简单的方法:

var selectedRows = listBox1.SelectedItems.Cast<DataRowView>().ToList();
foreach (var dr in selectedRows)
    dr.Delete();
相当于这样的东西

DataView dataView = AllPairs.Tables[0].DefaultView;
for (int i = 0; i < dataView.Count; i++)
{
    DataRowView dataRowView = dataView[i];
    listBox1.Items.Add(dataRowView);
}
DataView-DataView=AllPairs.Tables[0].DefaultView;
for(int i=0;i
现在,当我们知道列表框包含
DataRowView
对象时,尽管
SelectedItems
返回类型为
object
的项,但我们可以安全地将它们转换回
DataRowView
并调用
Delete
方法。
但是为什么我们需要
ToList
call?因为当我们删除一行时,数据源将向列表框发送一个通知,它将从
项和
选择编辑项中删除该项。虽然这不是必需的,但根据内部实现的不同,这可能会破坏选择。因此,为了绝对确保不会发生这种情况,在继续删除之前,我们将初始选择缓冲在列表中。

是否要从列表框或基础数据表?从基础表中删除行
DataView dataView = AllPairs.Tables[0].DefaultView;
for (int i = 0; i < dataView.Count; i++)
{
    DataRowView dataRowView = dataView[i];
    listBox1.Items.Add(dataRowView);
}