DataTable dt1 = GetDataTable();//你说的DataTable
DataTable dt2 = dt1.Clone();//复制下你说的那个表的表结构
DataRow[] drs = null;
foreach( DataRow dr in dt1 ) {
drs = dt2.Select( "姓名='" + dr["姓名"].ToString() + "'" );//查找dt2的重复数据
if( drs.Length > 0 ) {
drs["数量"] = drs["数量"] + dr["数量"];//将数量累加
}
else {
dt2.newrow;//dt2里边new一个新行,把数据加进去
}
}
dt2即为所求。
写的有点马虎,没有环境,希望能对你有所帮助
如果说放入之前能判断一下再放进去的话,你可以设置DATATABLE的PrimaryKey 。但是具体情况一定要先放进去了再来删除或合并相同的记录,好像没有更好的方法,那位如果知道更好的方法请告诉一声,我也想知道。没有别的办法就是只能遍历整个Datatable了,遍历的方法,前面的兄台有写。我觉得设置主键还是有好处的,查找数据还是要方便一些
这种需求,在数据库中处理是比较合适的方法
SQL 的写法:
SELECT [名字], SUM([数量]) AS [数量] FROM 表名 GROUP BY [名字]
DataTable d=new DataTable();
int i = 0;
foreach (DataRow dr in d.Table.Rows)
{
if (dr["名字"].ToString() == "李阳")
i += (int)dr["数量"];
}
return i;
public static DataTable ToDt(DataTable dtTemp)
{
if (dtTemp != null)
{
DataTable dt = dtTemp;
//对dt中数据以名称进行升序排序
DataView dv = new DataView(dt);
dv.Sort = "OrderNumber asc";
//去重复数据
DataTable dtRs = dv.ToTable(true);
for (int i = 0; i < dtRs.Rows.Count; i++)
{
DataRow temp = dtRs.Rows[i];
int Qty = 0;
//循环排序后的数据dv
foreach (DataRowView dr1 in dv)
{
if (temp["OrderNumber"].ToString() == dr1["OrderNumber"].ToString())
{
Qty += Convert.ToInt32(dr1["Qty"]);
dtRs.Rows[i]["Qty"] = Qty;
}
}
}
return dtRs;
}
else
{
return null;
}
}