Winform中删除dataset表中的行,咋没法实现呢?

jxbw7408 2016-12-03 10:25:03
循环读取dataset表中指定字段,从数据库中查询,如果数据库中已有数据了,就从表中删除该行,代码如下:
string ExcelSql = "Select * from " + SheetName + " where 订单号 like '%W028%'";
OleDbCommand ExcelCmd = new OleDbCommand(ExcelSql, NowExcelCon);
//OleDbDataReader MyRead = ExcelCmd.ExecuteReader();
OleDbDataAdapter MyA = new OleDbDataAdapter(ExcelCmd);
ExcelDs = new DataSet();
MyA.Fill(ExcelDs, SheetName);
//判断表格中的数据在数据库是否存在了
WangDianPeijCon.Close();
WangDianPeijCon.Open();
for (int i = 0; i < ExcelDs.Tables[0].Rows.Count; i++)
{

SqlCommand NfindCodeCmd = new SqlCommand("Select Wmailcode from WangDianPeij where Wmailcode = '" + ExcelDs.Tables[0].Rows[i]["运单号"].ToString().Trim() + "'",WangDianPeijCon);
SqlDataReader NDr = NfindCodeCmd.ExecuteReader();
if (NDr.HasRows)
{
ExcelDs.Tables[0].Rows[i].Delete();
ExcelDs.Tables[0].AcceptChanges();
}
NDr.Close();
}

dataGridView1.Columns[0].DataPropertyName = "订单号";
dataGridView1.Columns[1].DataPropertyName = "";
dataGridView1.Columns[2].DataPropertyName = "运单号";
dataGridView1.Columns[3].DataPropertyName = "寄件时间";
dataGridView1.Columns[4].DataPropertyName = "收件状态";
dataGridView1.Columns[5].DataPropertyName = "收方地址";
dataGridView1.Columns[6].DataPropertyName = "收方联系人";
dataGridView1.Columns[7].DataPropertyName = "收方手机号码";
dataGridView1.DataSource = ExcelDs.Tables[0];



结果是最后显示出来的数据,没有数据被删除掉,其实ExceDs.table[0]中只有一个记录是数据库中没有的!
...全文
184 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
jxbw7408 2016-12-09
  • 打赏
  • 举报
回复
真是晕了,同样的代码,没谈过啥,就是今天把注释取消掉,一运行正常,当天怎么弄也不行。结贴给分
jxbw7408 2016-12-03
  • 打赏
  • 举报
回复
removeAt效果是一样的。
快溜 2016-12-03
  • 打赏
  • 举报
回复
用RemoveAt,Delete只是更改行状态
  • 打赏
  • 举报
回复
引用 4 楼 tcmakebest 的回复:
循环的同时进行删除, 请用倒序操作, 从最后一条开始
+1,对的,不然下一次循环会找不到该行
tcmakebest 2016-12-03
  • 打赏
  • 举报
回复
循环的同时进行删除, 请用倒序操作, 从最后一条开始
  • 打赏
  • 举报
回复
应该是这样删除行:
 ExcelDs.Tables[0].RemoveAt(ExcelDs.Tables[0].Rows[i]);

110,571

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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