【问题标题】:How to create duplicate rows based on some conditions?如何根据某些条件创建重复行?
【发布时间】:2011-11-01 22:53:52
【问题描述】:

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

因此,在上述格式中,应创建三行,每行将 Year 列填充为 2011、2012 和 2013。如果其他列被复制则无关紧要

类似于年份列的格式也存在于另外一些 2-3 列中,例如销售列状态数字为 190~|~250~|~488。

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

下图解释得更详细。

我猜底子已经清零了。如果没有,请告诉我。

请指导

【问题讨论】:

  • 请您提供一些示例代码/数据
  • @curt:我希望提供整个 excel 表,这使得问题非常清楚。有什么办法可以在 SO 中上传吗?
  • 也许只是附上一个屏幕截图,显示带有一些示例数据的列。我认为您不能将 Excel 上传到 SO
  • 添加了支持图片。希望你(以及所有支持你的人)能看到它
  • @Curt:也在等待您的意见

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


【解决方案1】:

你在寻找这样的东西吗?

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

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

【讨论】:

  • 让我试试这个!.. 祈祷!
  • 那没用!代码所做的是,它只保留一列作为年份,其中包含第一列的数据(而不是 2011 年等年份)。剩余的列与数据一起被删除。
  • 但是如果我还有 3-4 列类似于 year 列怎么办?
  • 只是给我一个提示..我想试试..如果没有..另一个问题将发布在 SO..! :-)
  • 使用内循环使行数翻倍。它创建了 6 行,而不是 3 行
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多