如何根据某些条件创建重复行?

时间:2011-08-23 13:08:15

标签: asp.net visual-studio gridview datatable datarow

我的数据表有一些列包含格式为2011〜| ~2012~ | ~2013的数据。现在该表只有一行。但根据有多少这样的数据,应该创建许多行

因此,在上述格式中,应创建三行,每行都填写2011年,2012年和2013年的年份列。如果其他列重复,则无关紧要

类似于Year列的格式也存在大约2-3个列,例如Sales列状态数字为190~ | ~250~ | ~488。

一个重要注意事项:此处的行数应为3(考虑年份和销售列)。它不应该是9(3 x 3)。有一对一的关系,比如2011年的销售额是1.9亿美元,2012年是2.5亿美元,2013年的预期是4.88亿美元。

下图更详细解释。

我猜基础已经清除。如果没有,请告诉我。

请指导

Image Added

1 个答案:

答案 0 :(得分:3)

你在找这样的东西吗?

private DataTable AlterDataTable(DataTable oldTable)
{
    DataTable newTable = oldTable.Clone();
    foreach (DataRow row in oldTable.Rows)
    {
        var years = row["Year"]
        .ToString()
        .Split(new string[] { "~|~" }, StringSplitOptions.RemoveEmptyEntries)
        .ToList();
        foreach (var year in years)
        {
            row["Year"] = year;
            newTable.ImportRow(row);
        }

    }

    return newTable;
}

将其称为DataTable dataTable = AlterDataTable(dt);

对于此要求,请尝试此

private DataTable AlterDataTable(DataTable oldTable)
{
    DataTable newTable = oldTable.Clone();
    foreach (DataRow row in oldTable.Rows)
    {
        var years = row["Year"]
        .ToString()
        .Split(new string[] { "~|~" }, StringSplitOptions.RemoveEmptyEntries)
        .ToList();
        var sales = row["Sales"]
        .ToString()
        .Split(new string[] { "~|~" }, StringSplitOptions.RemoveEmptyEntries)
        .ToList();
        if (years.Count != sales.Count)
        {
            throw new Exception("Argument count mismatch exception");
        }
        for (var i = 0; i < years.Count; i++)
        {
            row["Year"] = years[i];
            row["Sales"] = sales[i];
            newTable.ImportRow(row);
        }
    }
    return newTable;
}

请注意,拆分应具有相同的计数。