楼上的 但是建议存在arrylist里面这样好循环控制

解决方案 »

  1.   

    我的代码,删除多行在al.Add(ds.Tables[0].Rows[ix][0]);
    会有错误:不能通过已删除的行访问该行的信息
    private void button1_Click(object sender, System.EventArgs e) 
     


    //将选定行的唯一标识放入ArrayList数组
    ArrayList al = new ArrayList();
    for (int ix=0;ix<ds.Tables[0].Rows.Count;ix++)
    {
    if (this.dataGrid1.IsSelected(ix))
    {
    al.Add(ds.Tables[0].Rows[ix][0]);//此句会出错
    }
    } //通过循环匹配唯一标识后删除行

    for(int i=0;i<al.Count;i++)
    {
    for(int iix=0;iix<ds.Tables[0].Rows.Count;iix++)
    {
    string id = Convert.ToString(al[i]);
    if(Convert.ToString(ds.Tables[0].Rows[iix][0])== id)
    {

    ds.Tables[0].Rows[iix].Delete();
    }
    }
    } MessageBox.Show("删除成功","Loading",MessageBoxButtons.OK); 
    }
      

  2.   

    不能通过已删除的行访问该行的信息!!!!
    datagrid的结构好像还是没变??
    帮忙看看,谢谢
      

  3.   

    而且不会真正删除数据库中的内容
    是不是要删除数据库中记录后,重新绑定Datagrid才行呀?
    急~~~~~~~~在线等
      

  4.   

    删除后调用一下AcceptChanges()方法可以避免上面的错误!
      

  5.   

    这是得到选中要删除的记录,该程序中是得到相应的主键id:int deleteNum=0;
    //删除选中的某一行或多行记录,调用DataGrid的IsSelected(i)函数,如果函数返回结果为true,则表示该行被选中
    ArrayList arrList = new ArrayList();
    for(int i=0;i<ColSpec.Rows.Count;i++)
    {
    if(dtg_BasicDataInfo.IsSelected(i)==true)
    {
    F_WR_Public.VO_ColSpec vo_ColSpec_Delete = new F_WR_Public.VO_ColSpec();
    //表中第三列保存的是列规格的主键,但没有显示在表中。
    vo_ColSpec_Delete.colSpecID = Int64.Parse(ColSpec.Rows[i][2].ToString());
    arrList.Add(vo_ColSpec_Delete);
    deleteNum++;
    }
    }
      

  6.   

    这是删除数据库中的记录。
    /// <summary>
    /// 删除某个功能,并且删除角色功能表和操作员授权表中相应的功能的记录;
    /// 且把界面定制表中相应的功能名称后面加上“(该功能已收回)”字样,并对改表中
    /// 相应的功能ID置为null
    /// </summary>
    private void DeleteFuncItem(long funcID,string funcName)
    {
    funcTableConn.Open();
    System.Data.OracleClient.OracleTransaction myTran = funcTableConn.BeginTransaction ();
    try
    {
    OracleCommand cmd = new OracleCommand ();
    cmd.Transaction = myTran;
    cmd.Connection =funcTableConn;
    cmd.CommandText = "DELETE from 功能 where 功能ID = '"+funcID+"'";
    cmd.ExecuteNonQuery ();
    cmd.CommandText = "DELETE from 角色功能 where 功能ID = '"+funcID+"'";
    cmd.ExecuteNonQuery ();
    cmd.CommandText = "DELETE from 操作员授权 where 功能ID = '"+funcID+"'";
    cmd.ExecuteNonQuery ();
    string newFuncName=funcName+"(该功能已收回!)";
    cmd.CommandText = "UPDATE 界面定制 set 功能ID=null,节点名称='" + newFuncName+"'"+ " where 功能ID ="+funcID;
    cmd.ExecuteNonQuery ();
    myTran.Commit ();
    }
    catch(Exception ee)
    {
    try
    {
    myTran.Rollback();
    }
    catch (OracleException ex)
    {
    if (myTran.Connection != null)
    {
    ErrorHandle.show("回滚时发生异常:",ex,"功能维护");
    }
    }

    ErrorHandle.show("删除数据时发生异常:",ee,"功能维护");
    }
    finally
    {
    funcTableConn.Close();
    }
    }
      

  7.   

    可以和XML一起来使用,用XML里的数据岛来做,不过如果XML不熟悉的话会有些麻烦。
      

  8.   

    flare826() 方法可行,非常感谢
      

  9.   

    不客气。我最近在做界面,用数据库操作和datagrid,dataset之类的操作很多。我的blog里面有相关的一些程序,有兴趣去看看。blog.csdn.net/flare826