0

我认为这个问题与引用类型有关,而我对这些缺乏了解......

所以我动态创建了 ASP.Net 表(如在 Web.UI.WebControls.Table 中,而不是数据库种类)这些可以有任何东西,从一行带有一个带有文本的单元格,到一系列嵌套表和控件,具体取决于客户。

我需要遍历每个 TableRow,如果满足某个条件,那么我将该行复制到第二个 Table 对象。这是代码的简化位。

        Table xTblComplete = (passed in as parameter) // original & complete table
        Table xTblTemp = new Table();  // gets built dynamically with specific rows

        foreach (TableRow xThisRow in xTblComplete.Rows)
        { 
            if (xThisRow.Cells.Count > 0)
            {
                if (certain condition met)
                {
                    xTblTemp.Rows.Add(xThisRow);
                }
            }
        }

我遇到困难的地方是,当我尝试将 TableRow 添加到 Table2 时,foreach(table.rows 中的行)会引发错误。我收到错误“集合已修改;枚举操作可能无法执行。”这是有道理的,因为我应该复制该表行以添加。

谁能建议这是如何完成的?我已经扫描了 MSDN 和论坛中的一般引用类型复制,但它们似乎都指向使用 ICloneable ,我相信我无法这样做,因为这不是我的课程。

我希望这是我错过的一些小而基本的东西,在此先感谢。

4

2 回答 2

2

您正在使用for loop. 这样做时您无法修改集合,这就是您收到错误消息的原因。该行附加到该表。时期。

如果您需要该行的副本,请逐个单元格获取您要查找的值。这是一个例子:

TableRow  tempRow= new TableRow();
Table  xTblTemp= new Table();
for (int i = 0; i < xTblComplete.Rows[0].Cells.Count - 1; i++)
{
  TableCell cell = xTblComplete.Rows[0].Cells[i];
  tempRow.Cells[i].Text = cell.Text;      
}
xTblTemp.Rows.Add(tempRow);
于 2012-07-25T19:12:41.783 回答
0

感谢 Ulises,您的回答很有帮助,不幸的是,这些表格的复杂性导致了一个简单的循环和复制内容。我的意思是有些单元格可能有 5 层嵌套表,每个表中包含任意数量的 Web 控件。是的,一个 CSS 完美主义者会对这么多嵌套表的想法感到厌烦,但这是必须要做的!

最后,我使用了一个 while(bln) 循环,每次都检查 xTblComplete.Rows[0]。

如果它满足条件,我会将它复制到 xTmpTable,它也将它从 xTblComplete 中删除。

如果它不符合条件,我会自己删除它( xTblComplete.Rows.Remove(xTblComplete.Rows[0]);

这样,Rows[0] 将始终是下一个要处理的。在每个循环之后,我检查了 bln 是否有更多要处理的行,如果没有,则循环将退出。

于 2012-07-27T13:13:42.943 回答