遍历DataTable时移除某些行
来源:互联网 发布:faceu软件下载 编辑:程序博客网 时间:2024/05/17 01:59
最近用到一个功能,遍历一个表,找出满足条件的数据,插入另一张表,并当前表中的行,避免重复插入且优化系统性能。
例如:一个表包含BelongName,MarketProjectID,Year,Month,要从这个表中找板块1在2012年的工程数量,示例如下:
为了节约资源及优化代码,在循环中就要移除已获取记录的行,所以这里用到三张表,一张源数据复制表(内层循环:确保所有数据都要被遍历到),一张源数据表(外围循环表,记录被移除行后的最新源数据表),一张结果表(用于记录所需要的最终结果)。
/// <summary> /// 获取空表 /// </summary> /// <returns></returns> private DataTable GetNullDt() { DataTable dtResultNull = new DataTable(); dtResultNull.Columns.Add("Name"); dtResultNull.Columns.Add("Num"); dtResultNull.Columns.Add("Ratio"); dtResultNull.PrimaryKey = new DataColumn[] { dtResultNull.Columns["Name"] }; //建立主键,按月度查询时需避免插入重复键 return dtResultNull; }
/// <summary> /// 获取绑定数据 /// 获取累计行及比例 /// </summary> /// <returns></returns> private DataTable GetRatio(DataTable dtBase) { DataTable dtResult=GetNullDt();//最终结果表 decimal total = 0; DataTable dtGet = dtBase.Copy(); for (int i = 0; i < dtBase.Rows.Count; i++)//外层循环:源数据表,已被记录的行不在遍历,优化性能避免重复 { string name = dtBase.Rows[i]["Name"].ToString(); decimal Num = 0; DataRow drNew = dtResult.NewRow(); for (int j = 0; j < dtGet.Rows.Count; j++) //内层循环:源数据复制表,用于记录所有数据,确保每条记录都会被遍历 { DataRow dr = dtGet.Rows[j]; DataRow drBase = dtBase.Rows[0]; drBase.ItemArray = dr.ItemArray; if (dr["Name"].ToString().Equals(name)) {
if (!dtResult.Rows.Contains(name)) //判断结果表是否已包含该板块 { Num++; } dtBase.Rows.Remove(drBase); //移除源数据表中被记录的行 dtBase.AcceptChanges(); } }if (!dtResult.Rows.Contains(name)) { drNew["Name"] = name; drNew["Num"] = Num; dtResult.Rows.Add(drNew); total += Num;} } if (total > 0) { foreach (DataRow drResult in dtResult.Rows) { if (!string.IsNullOrEmpty(drResult["Num"].ToString())) { drResult["Ratio"] =Math.Round( Convert.ToDecimal(drResult["Num"]) / total*100,2); } } } if (dtResult.Rows.Count > 0) { DataRow drTotal = dtResult.NewRow(); drTotal["Name"] = "小计"; drTotal["Num"] = total; drTotal["Ratio"] = "100"; dtResult.Rows.Add(drTotal); } return dtResult; }
- 遍历DataTable时移除某些行
- 遍历List并移除其中的某些元素
- 遍历集合时移除一个元素
- Map---遍历移除
- 移除程序的某些权限
- 从DataGridView 或 DataTable 数据集中移除不需要的行
- datatable 遍历
- 筛选出DataTable中某些行并存入另一个datatable中
- jQuery 遍历ul li 添加 移除
- C#遍历集合移除元素
- 遍历数组时移除数组中元素造成程序崩
- 循环遍历数组时同时移除不符合条件的元素
- 写一段代码在遍历 ArrayList 时移除一个元素?
- 遍历datatable的方法
- 遍历datatable的方法
- 遍历datatable的方法
- c# DataTable遍历
- 遍历datatable方法
- 什么是服务器集群
- socket聊天程序(多线程,控制台)
- DEBUG情况下的程序异常
- 转载
- android edittext不弹出软键盘
- 遍历DataTable时移除某些行
- c++中new的用法
- 给XML文件定义DTD
- 读取数据并转换。double.prase
- flot中文参考文档
- EXCEL导入导出类
- vs项目所需的应用程序未安装,确保已安装项目类型(.csproj)的应用程序的解决办法
- boost::ptr_map
- 十三周报告一