如何删除列表框中选中的表中的多个行?

时间:2015-09-22 10:48:32

标签: 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";

列表框选择属性是MultiExtended。

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

当您使用DataTable作为DataSource的{​​{1}}时,项目的类型为DataRowView,因此您可以使用ListBox Delete方法或使用DataRowView Row属性访问该数据行视图后面的行,并从DataRowView中删除该行。

您可以使用此代码:

DataTable

答案 2 :(得分:0)

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

var selectedRows = listBox1.SelectedItems.Cast<DataRowView>().ToList();
foreach (var dr in selectedRows)
    dr.Delete();

一个小解释。我将使用具体类型而不是var关键字来更好地理解。以下一行

listBox1.DataSource = AllPairs.Tables[0];

等同于此类

DataView dataView = AllPairs.Tables[0].DefaultView;
for (int i = 0; i < dataView.Count; i++)
{
    DataRowView dataRowView = dataView[i];
    listBox1.Items.Add(dataRowView);
}

现在,当我们知道列表框包含DataRowView个对象时,虽然SelectedItems会返回object类型的项目,但我们可以安全地将它们转换回DataRowView并调用Delete方法。 但为什么我们需要ToList来电?因为当我们删除行时,数据源会向列表框发送通知,并会从ItemsSelectedItems中删除该项目。虽然它不是必需的,但根据内部实现,这可能会破坏选择。因此,为了绝对确保不会发生这种情况,我们会在继续删除之前在列表中缓冲初始选择。