我有下表数据表。
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
我们如何进一步拆分它以检查CourseName的数量不超过2? 如果您需要进一步说明,请与我们联系。检查附件的代码 请帮忙。
这是代码
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.
}
}
}
答案 0 :(得分:0)
好吧,看起来你只需要一个很小的改变。
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;
}
}
由于您只组合了两个类,因此您知道在找到dataTable [i]的匹配项后,您可以停止查找。
但是,这只有在您可以假设每个课程名称都是唯一的时才有效(如您的示例所示)。我将假设这可能是不真实的,如果是这样的话,您必须进行更深入的检查
// 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();
}