c# - 数组复制在循环中失败

标签 c# arrays

简化问题:

我想使用以下动态构建一个 html 表。

   //table.Rows[row].Cells.AddRange(new TableCell[] { new TableCell(), new TableCell(), new TableCell(), new TableCell(), new TableCell(), new TableCell() });


for (int row = 0; row < intRows; row++)
{
    table.Rows.Add(new TableRow());
    table.Rows[row].Cells.AddRange(new TableCell[intCellsPerRow]);
    intTableRows = row;

}

我之前用过注释行,但是不灵活,不是我想要的。

行:table.Rows[row].Cells.AddRange(new TableCell[intCellsPerRow]); 不起作用。

我怎样才能让它工作?

回答 感谢 Heinzi

  for (int row = 0; row < dtStructure.Rows.Count / TABLE_COLUMNS; row++)
            {

                table.Rows.Add(new TableRow());

                for (int i = 0; i < CELLS_PER_COLUMN * TABLE_COLUMNS; i++)
                {
                    table.Rows[row].Cells.Add(new TableCell());
                }

                intTableRows = row;
            }

最佳答案

您正在向所有行添加相同 单元格。这是发生了什么:第一次迭代后,您创建的 (CELLS_PER_COLUMN * TABLE_COLUMNS) 单元格将第一行作为其父级。第二次迭代后,它们的父级更改为第二行,依此类推。最后,它们都位于最后一行。请注意,ToArray 不会复制单元格,它只是将单元格的引用复制到新数组中。因此所有行都尝试共享相同 单元格,这是行不通的(WebControl,例如TableCell 只能有一个父级)。

对于每一行,您都需要创建 单元格。我假设您想要这样的东西:

for (int row = 0; row < datatable.Rows.Count / 6; row++)
{
    table.Rows.Add(new TableRow());
    for (int i = 0; i < CELLS_PER_COLUMN * TABLE_COLUMNS; i++)
    {
        table.Rows[row].Cells.Add(new TableCell());
    }
}

未经测试,因为我现在没有可用的 Visual Studio,但你应该明白了......

编辑:我刚刚看到您编辑了您的问题。你的线路

table.Rows[row].Cells.AddRange(new TableCell[intCellsPerRow]);

不起作用,因为您在此处添加了一个 intCellsPerRow 表格单元格数组,即您的数组包含 {null, null, ...} 。您需要像我上面的代码示例中那样使用 new 创建每个单元格。

关于c# - 数组复制在循环中失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3864169/

相关文章:

c# - Azure Functions EventHub 触发器连接字符串

c# - 在使用 MongoDB C# 驱动程序的 ensureIndex 之后,Id 字段映射被破坏

c# - HTTPModule 处理页面内容

arrays - Swift 4 数组将 nil 映射到字符串

c# - 我可以使用C#创建一个Facebook应用程序吗?

c# - DBContext Find with Includes - 其中 lambda 带主键

php - bash awk - 需要来自 php 脚本的关联数组输出

php - 从 PHP 中的数组中获取值

java - 有人可以向我解释一下发生了什么事吗?有很多事情正在发生,我还没有被教导过

c++ - 指向二维数组的指针