拆分数据表

时间:2012-02-01 22:10:23

标签: c# .net

我有下表数据表。

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.
        }
    }
}

1 个答案:

答案 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();  
}