DataRow.Delete()与Rows.Remove()

本文探讨了在处理dataset数据时,使用DataRow.Delete()与DataTable.Rows.Remove()两种方法的区别。通过实践发现,仅使用Delete()方法虽然能在DataGridView中显示删除效果,但在绑定到报表时数据仍存在;而使用Remove()方法则能有效解决此问题。

我在处理dataset数据时,发现一下两个函数的区别.现在还没有搞太清除,只是实现了我要的功能.

dataSet1.Tables["Result"].Rows.Remove(dr);

DataRow.Delete(); 

我的dataset数据是从数据库读出来的,然后根据用户的标准对datarow数据进行筛选,不合格的要从dataset里删除.注意,不是删除数据库中的记录,只是从dataset里删除.然后用报表打印出来.

一开始我用delete()函数,在datagridview里面显示是删除了.但是把dataset绑定到报表时发现数据行依然存在.
于是改用Remove()函数,问题就解决了.

在MSDN文档里也没有说的很清楚.
网上有人说delete只是把Row标记为删除,并没有从数据库删除.至于为什么在gridview里删除了,就有点匪夷所思.
Remove方法也是要调用update之后才能更改数据库.有点混乱.

代码分析: private void RMImport(DataTable dt) { this.Cursor = Cursors.WaitCursor; string histmon = Convert.ToString(dt.Rows[1][1]).Replace("-", "").Substring(0, 6); #region Stocked //删除所传数据月份数据 string sql_del = @" DELETE FROM icost_detail_obms_rm_stock WHERE histmonth = '" + histmon + @"' "; DataTool.ExecuteSql(sql_del); DataTable dt_stock = new DataTable(); dt_stock = dt.Clone(); foreach (DataRow dr in dt.Rows) { if (Convert.ToString(dr[0]).Contains("Non-stocked")) { break; } dt_stock.ImportRow(dr); } // 确保至少有6行 if (dt_stock.Rows.Count >= 6) { // 获取列名--第六行的值 DataRow row6 = dt_stock.Rows[5]; for (int i = 0; i < dt_stock.Columns.Count; i++) { dt_stock.Columns[i].ColumnName = row6[i].ToString().Replace("/", "").Replace(" ", "").Replace(".", "").Trim().ToUpper(); } // 删除前五行(多余行) for (int i = 0; i < 6; i++) { dt_stock.Rows.RemoveAt(0); } } //检查是否有空行 DataRow[] delrows = dt_stock.Select("costcenter = '' OR costcenter IS NULL"); foreach (DataRow row in delrows) { dt_stock.Rows.Remove(row); } dt_stock.Columns.Add("GRADE1"); dt_stock.Columns.Add("HISTMONTH"); foreach (DataRow dr in dt_stock.Rows) { dr["GRADE1"] = "Fab1"; dr["HISTMONTH"] = histmon; } int j = 0; if (dt_stock != null) { j = DataTool.BulkInsert("icost_detail_obms_rm_stock", dt_stock); } #endregion #region Non-Stocked //删除所传数据月份数据 string sql_del1 = @" DELETE FROM icost_detail_obms_rm_non_stock WHERE histmonth = '" + histmon + @"' "; DataTool.ExecuteSql(sql_del1); dt.Columns[0].ColumnName = "fab"; DataTable dt_nonstock = new DataTable(); dt_nonstock = dt.Copy(); dt_nonstock.DefaultView.RowFilter = "fab in('Plant','PT01')";//plant为后续要获取的列名行;PT01固定不变 dt_nonstock = dt_nonstock.DefaultView.ToTable(); // 确保至少有1行 if (dt_nonstock.Rows.Count >= 1) { List<string> emptycol = new List<string>(); // 获取列名--第一行的值 DataRow row1 = dt_nonstock.Rows[0]; for (int i = 0; i < dt_nonstock.Columns.Count; i++) { if (!string.IsNullOrEmpty(Convert.ToString(row1[i]))) { if (Convert.ToString(row1[i]).ToUpper() == "USER")//需特殊处理的列名 数据库中保持一致 { dt_nonstock.Columns[i].ColumnName = "USERID"; } else { dt_nonstock.Columns[i].ColumnName = row1[i].ToString().Replace("/", "").Replace(" ", "").Replace(".", "").Trim().ToUpper(); } } else { emptycol.Add(dt_nonstock.Columns[i].Caption); } } // 删除多余列 否则影响BulkInsert for (int i = 0; i < emptycol.Count; i++) { dt_nonstock.Columns.Remove(emptycol[i]); } // 删除第一行(多余行) for (int i = 0; i < 1; i++) { dt_nonstock.Rows.RemoveAt(0); } } //检查是否有空行 DataRow[] delrows1 = dt_nonstock.Select("plant = '' OR plant IS NULL"); foreach (DataRow row in delrows1) { dt_nonstock.Rows.Remove(row); } dt_nonstock.Columns.Add("GRADE1"); dt_nonstock.Columns.Add("HISTMONTH"); foreach (DataRow dr in dt_nonstock.Rows) { dr["GRADE1"] = "Fab1"; dr["HISTMONTH"] = histmon; } int y = 0; if (dt_nonstock != null) { y = DataTool.BulkInsert("icost_detail_obms_rm_non_stock", dt_nonstock); } #endregion if (j > 0 && y > 0) { DevExpress.XtraEditors.XtraMessageBox.Show("RM相关数据保存成功"); } else { if (j > 0 && y == 0) { DevExpress.XtraEditors.XtraMessageBox.Show("Non-Stocked部分保存失败!请联系开发人员"); } else if (j == 0 && y > 0) { DevExpress.XtraEditors.XtraMessageBox.Show("Stocked部分保存失败!请联系开发人员"); } else { DevExpress.XtraEditors.XtraMessageBox.Show("RM相关数据保存失败!请联系开发人员"); } } this.Cursor = Cursors.Default; }
08-30
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值