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