简化问题:
我想使用以下动态构建一个 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/