试试这样呢:int i=dsFiles1.File.Rows.Count-1;
         while(i >= 0)
{
     if (grdFilelist.IsSelected(i))
     {
   dsFiles1.File.Rows[i].Delete();//会删到别的行
      }
      i--;
}

解决方案 »

  1.   

    cancersyf(fengzhimei) ( ) 信誉:99 
    ----------
    不行的!
    我按了排序后就不行了,主要是数据在grid中的行号,跟在table中的行号是没对上的。
      

  2.   

    private void btRemoveFile_Click(object sender, System.EventArgs e)
    {
    grdFilelist.Focus();
    SendKey.send("{DELETE}");
    }
      

  3.   

    int i=0;
             while(i< dsFiles1.File.Rows.Count-1)
    {
         if (grdFilelist.IsSelected(i))
         {
       dsFiles1.File.Rows[i].Delete();
                         dsFiles1.File.AcceptChanges();//确认修改
    //    
       }
          i++;
    }试一下,有问题再联系。
      

  4.   

    各位我的问题是我选中A行,然后删除,但发现B行不见了,A行还在。
    就是GRID的行号跟DataSet中的行号是没对应的,如何办?
      

  5.   

    绑定的时候位置差了一行?……看看位置差多少,把
    dsFiles1.File.Rows[i].Delete();//会删到别的行这句里面的i做修正,改成
    dsFiles1.File.Rows[i+1].Delete();
    dsFiles1.File.Rows[i-1].Delete();
    之类……不然看你怎么把dataset绑定到datagrid的,改改那里
      

  6.   

    删除之前先要找到数据库中对应的行,应该这样,windowsXP+.net2003下测试通过
    using System.Date;if(MessageBox.Show("Are you sure to delete this part?","note",MessageBoxButtons.YesNo,MessageBoxIcon.Question,MessageBoxDefaultButton.Button1)==DialogResult.Yes)
    {
    ///////////DELETE PARTS//////////////////////////////////////////////////////////
    //找到行
    DataColumn[] part_keys =new DataColumn[1];
    part_keys[0] = service_DataSet1.Tables["PARTS"].Columns["PART_ID"];
    service_DataSet1.Tables["PARTS"].PrimaryKey=part_keys;DataRow partRow = service_DataSet1.Tables["PARTS"].Rows.Find(service_DataSet1.Tables["PARTS"].Rows[grd_parts.CurrentRowIndex][0]);
    if(partRow!=null)
    {
    try
    {
    partRow.Delete();storage_DataAdapter.Update(service_DataSet1,"PARTS");
    }
    catch(Exception ex)
    {
     MessageBox.Show(ex.ToString());
    }
    }
    else
    {
     MessageBox.Show("DataBase PARTS Error!!");
    }
    }
    service_DataSet1是DateSet   storage_DataAdapter是DataAdapter  PARTS是基本表名
      

  7.   

    i = grdFilelist.CurrentRowIndex;
    dsFiles1.File.Rows[i].Delete();这样不知道行不行,先找到你选择的行,再删掉。
      

  8.   

    lcx45(木头) ( ) 信誉:100 
    ----
    您好!你的方法还是没有把Grid的行号和Dataset的行号对应起来啊!难道排序后就不能删除了吗?
      

  9.   

    private void btRemoveFile_Click(object sender, System.EventArgs e)
    {
    grdFilelist.Focus();
    SendKey.send("{DELETE}");
    }
    -----------
    这个方式在readonly=true时无效啊!
      

  10.   

    以下可以删除当前行:
    dataSet11.Tables["XXX"].Rows[dataGrid1.BindingContext[dataSet11,"XXX"].Position].Delete();
      

  11.   

    http://dotnet.aspx.cc/好好看一下啦
      

  12.   

    以下可以删除当前行:
    dataSet11.Tables["XXX"].Rows[dataGrid1.BindingContext[dataSet11,"XXX"].Position].Delete();
    -------------
    只能删除一行,但有个怪问题:删除第三行,第四行就变为第三行,但新的第三行再也删除不了。
      

  13.   

    删除当前行用以下更好(测试通过):
    CurrencyManager cm=(CurrencyManager)dataGrid1.BindingContext[dataGrid1.DataSource,dataGrid1.DataMember];
    ((DataView)cm.List).Delete(cm.Position);
      

  14.   

    datagrid中的行号和索引号是不同的,行号是从1开始的,而索引号是从0开始的。假如你选中的是第五行,grdFilelist.IsSelected(i)为true时i=5,而dsFiles1.File.Rows[5].Delete()删除的却是第6行.
      

  15.   

         //删除行   
         dsFiles1.File.Rows[i].Delete();
         //更新删除  
         dsFiles1.File.AcceptChanges();
      

  16.   

    Up一下先,我觉得有必要改写dataGrid,原来的功能不够强大
      

  17.   

    删除时不能直接Tables["XXX"].Rows[k].Delete();
    要通过CurrencyManager来删除, ((DataRowView)cm.Current).Delete();
    以下测试通过,但不明白原理。CurrencyManager cm=(CurrencyManager)dataGrid1.BindingContext[dataGrid1.DataSource,dataGrid1.DataMember];
    int top=dataGrid1.CurrentRowIndex;
    int[] Lines=(int[]) Array.CreateInstance(typeof(int),dataGrid1.VisibleRowCount);
    for(int k=1;k<dataGrid1.VisibleRowCount;k++)
    {
    if(dataGrid1.IsSelected(k)) Lines[k]=1;
    }
    for(int k=dataGrid1.VisibleRowCount-1;k>=0;k--)
    {
    if(Lines[k]==1)
    {
    //1. 不行
    // this.dataSet11.Tables["XXX"].Rows[k].Delete();
    // this.dataSet11.Tables["XXX"].Rows[k].AcceptChanges(); //2. OK
    dataGrid1.CurrentRowIndex=k;
    ((DataRowView)cm.Current).Delete();
    }
    }