选择多行Datagrid并删除? 楼上的 但是建议存在arrylist里面这样好循环控制 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我的代码,删除多行在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); } 不能通过已删除的行访问该行的信息!!!!datagrid的结构好像还是没变??帮忙看看,谢谢 而且不会真正删除数据库中的内容是不是要删除数据库中记录后,重新绑定Datagrid才行呀?急~~~~~~~~在线等 删除后调用一下AcceptChanges()方法可以避免上面的错误! 这是得到选中要删除的记录,该程序中是得到相应的主键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++; } } 这是删除数据库中的记录。/// <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(); } } 可以和XML一起来使用,用XML里的数据岛来做,不过如果XML不熟悉的话会有些麻烦。 flare826() 方法可行,非常感谢 不客气。我最近在做界面,用数据库操作和datagrid,dataset之类的操作很多。我的blog里面有相关的一些程序,有兴趣去看看。blog.csdn.net/flare826 asp.net里form的method问题 datagridview问题 让PICBOX图片飘逸的效果 客户端的pc启动后,如何跟数据库服务器端校对时间(c#中如何把客户端pc的时间修改为服务器端的时间) 谁可以提供一个企业级的开源程序——小的业可以,最好使用C#和JAVA开发的 tcp打洞 如何将存储时间类型的文本框里的数据存到数据库中? 求后台批量获取网页源代码存入数据库UI界面不卡设计思路 关于水晶报表的问题和PrintDocument控件 小弟请教一下,谁能给一个3DES算法,我把分全给了 人力资源需求,有兴趣可以一试 怎样用c#自动打开某个网站并执行一些动作?
会有错误:不能通过已删除的行访问该行的信息
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);
}
datagrid的结构好像还是没变??
帮忙看看,谢谢
是不是要删除数据库中记录后,重新绑定Datagrid才行呀?
急~~~~~~~~在线等
//删除选中的某一行或多行记录,调用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++;
}
}
/// <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();
}
}