我有下面的数据表。
Name classhours Coursename
======================================
Tom 2 A
Jack 2 B
Joe 2 C
stella 3 D
Jose 3 E我需要把表行合并成那些有相同的列,然后把它们加起来。
表B
Name classhours Coursename
===============================================
Tom,Jack,Joe 6 A,B,C
Stella,Jose 6 D,E现在我需要进一步分割它..。在课程名称栏中,我最多可以有2门课程。所以我需要把表B分解成下面的表格
Name classhours Coursename
===============================================
Tom,Jack 4 A,B
Joe 2 C
Stella,Jose 6 D,E我们如何进一步拆分它以检查不超过2的CourseName计数?如果您需要进一步的解释,请告诉我。检查注意的代码,请帮助。
这是代码
for (int i = 0; i < dataTable.Rows.Count; i++)
{
for (int j = i + 1; j < dataTable.Rows.Count; j++)
{
if(datatable.Rows[i]["classhours"].ToString() == datatable.Rows[j]["classhours"].ToString())
{
//Adding the second row and third row to the first row and deleting the second and third row.
}
}
}发布于 2012-02-01 22:30:55
看来你只是需要一小笔零钱。
for (int i = 0; i < dt.Rows.Count; i++)
{
bool notCombined = true;
int target = dt.Rows[i]["hours"];
for (int j = i + 1; j < dt.Rows.Count && notCombined; j++)
{
if(target == dt.Rows[j]["hours"].ToString())
{
dt.Rows[i]["name"] += "," + dt.Rows[j]["Name"];
dt.Rows[i]["hours"] += target;
dt.Rows[i]["course"] += "," + dt.Rows[j]["course];
dt.Rows[j].Delete();
notCombined = false;
}
}因为您只组合了两个类,所以您知道,在找到了dataTablei的匹配之后,您可以停止查找。
但是,只有当您可以假设每个课程名称都是唯一的(如您的示例中所示)时,这才有效。我将假设这可能是不正确的,如果是这样的话,您必须做更深入的检查。
// Assuming classhours matches for dataTable.Rows[i] and dataTable.Rows[j]
if( dt.Rows[i]["course"].indexOf( dt.Rows[j]["course"] ) != -1 )
{ // dt already has the same course
dt.Rows[i]["Name"] += "," + dt.Rows[j]["Name"];
dt.Rows[i]["hours"] += target;
dt.Rows[j].Delete();
}
else if( dt.Rows[i]["course"].indexOf(',') == -1 )
{// dt[i] either contains just one course
dt.Rows[i]["name"] += "," + dt.Rows[j]["Name"];
dt.Rows[i]["course"] += "," + dt.Rows[j]["course];
dt.Rows[i]["hours"] += target;
dt.Rows[j].Delete();
}https://stackoverflow.com/questions/9104109
复制相似问题