一个关于DataTable删除行数的据奇怪问题!

Shalves 2009-09-01 05:16:31
前面那些conn,cmd什么的就不写了。

Public void del_row()
{
...
conn.Open();
SqlDataAdapter sda = new SqlDataAdapter(cmd,conn);
SqlCommandBuilder bdr = new SqlCommandBuilder(sda);
DataTable dt = new DataTable();
sda.Fill(dt);
DataRow[] row = dt.Select("Id=" + Int32.Parse(DropDownList1.SelectedValue)); //根据下拉列表框的选择,筛选特定的行集
//下面是问题
row[0].Delete();
//dt.Rows.Remove(row[0]); //注释掉上一行,这句始终不起作用,不管单独用还是加上下一行。
//dt.AcceptChanges(); //这句如果跟在row[0].Delete()后面,则删除无效,跟在上一行后面,没效果。
sda.Update(dt);
}


不都说DataRow.Delete()方法只是把状态设置为删除,不实际删除数据吗?为什么在后面用了DataTable.AcceptChanges()方法反而不行了呢。
还有为什么直接用DataTable.Rows.Remove(DataRow)在我这里不起作用呢?
是否跟后面的sda.Updata(dt)有关系呢?

请高手赐教。
...全文
163 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiajian19820809 2009-09-02
  • 打赏
  • 举报
回复
顶起 接分
wo6522317 2009-09-02
  • 打赏
  • 举报
回复
TEST:
DataTable dt = new DataTable("Data");
dt.Columns.Add("name");
dt.Rows.Add("1");
dt.Rows.Add("2");
dt.Rows.Add("3");
dt.Rows.Add("4");
dt.Rows.Add("5");
dt.Rows.Add("6");
dt.Rows.Add("7");

DataRow[] rows = dt.Select("name='7'");
// Remove() 方法
dt.Rows.Remove(rows[0]);
// Delete() + AcceptChanges() 方法
//rows[0].Delete();
//dt.AcceptChanges();
我拭了都可以的;你调试跟踪下代码,不要直接用程序看或查询数据库的结果;
Shalves 2009-09-01
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 wo6522317 的回复:]
row[0].Delete();
dt.AcceptChanges();
==
dt.Rows.Remove(row[0]);

两个二选一 如果还不行 你再仔细DEBUG下;边走边看数据的变化;
---------------------------------------------
MSDN:
Remove()方法:当移除行时,该行中的所有数据都将丢失。还可以调用 DataRow 类的 Delete 方法来标记某行以供移除。调用 Remove 等同于先调用 Delete 再调用 AcceptChanges。
[/Quote]

我上面的代码在我的程序里执行完,结果是正确的,就是删除了正确的行。就是因为加上dt.AcceptChanges();这一句,就不正确了。dt.Rows.Remove(row[0]);的结果也不正确,都是不更新数据库。
Shalves 2009-09-01
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 yechangda 的回复:]
下拉框重新绑定了吗
[/Quote]

有重新绑定,不过那个不是重点。
lovnov 2009-09-01
  • 打赏
  • 举报
回复
// Delete
rowdTable.Rows[1].Delete();
dTable.AcceptChanges();
chenyunkun2008 2009-09-01
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 wo6522317 的回复:]
row[0].Delete();
dt.AcceptChanges();
==
dt.Rows.Remove(row[0]);

两个二选一 如果还不行 你再仔细DEBUG下;边走边看数据的变化;
---------------------------------------------
MSDN:
Remove()方法:当移除行时,该行中的所有数据都将丢失。还可以调用 DataRow 类的 Delete 方法来标记某行以供移除。调用 Remove 等同于先调用 Delete 再调用 AcceptChanges。
[/Quote]

顶,试试这个方法,相应能找出答案
wo6522317 2009-09-01
  • 打赏
  • 举报
回复
row[0].Delete();
dt.AcceptChanges();
==
dt.Rows.Remove(row[0]);

两个二选一 如果还不行 你再仔细DEBUG下;边走边看数据的变化;
---------------------------------------------
MSDN:
Remove()方法:当移除行时,该行中的所有数据都将丢失。还可以调用 DataRow 类的 Delete 方法来标记某行以供移除。调用 Remove 等同于先调用 Delete 再调用 AcceptChanges。
  • 打赏
  • 举报
回复
先确认DataRow数组row里有值。。
yechd 2009-09-01
  • 打赏
  • 举报
回复
下拉框重新绑定了吗

62,064

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧