你的代码有问题。
this.listBox.SelectedIndex并不是实际的Rows里的index
这两个值并不一一对应。index是静态的,不会随着你的删除自动排序。
所以应该会出现找不到那个行,或不能访问已经被删除的行的错误。你可以使用
this.cmDataSet.Tables["CommiteeMan"].DefaultView[this.listBox.SelectedIndex].delete()
这样应该不会有错了。

解决方案 »

  1.   

    this.listBox.SelectedIndex只有一个,你的代码会一删除到小于选择行,报下标溢出而且据我印象,如果用多选,会把n行认为是一行,所以,只有检查未被选中...
    string sDelID = "";
    for(int i=0; i< list.Items.Count; i++)
    {
    if(!list.Items[i].Selected)
    {
    if(sDelID != "")
    sDelID += ",";

    sDelID += list.Items[i].Value; //如果是字符类的加''
    }
    }string sql = "Delete Table Where id not in ()";
      

  2.   

    避免下标溢出
    for(int i = list.Items.Count-1;i > -1;i--)
    {
        if(list.Items[i].Selected == true)
        {
             //* your code
         }}
      

  3.   

    避免下标溢出
    for(int i = list.Items.Count-1;i > -1;i--)
    {
        if(list.Items[i].Selected == true)
        {
             //* your code
         }}