【问题标题】:Copying ASP.Net TableRow复制 ASP.Net TableRow
【发布时间】:2012-07-25 19:04:29
【问题描述】:

我认为这个问题与Reference Types有关,而我对这些缺乏了解......

所以我动态创建了 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 ,我相信我无法这样做,因为这不是我的课程。

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

【问题讨论】:

    标签: c# asp.net copy tablerow


    【解决方案1】:

    您正在使用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);
    

    【讨论】:

    • 感谢 Ulises - 如果我的 TableCells 仅包含文本,该解决方案将有效。但是它们也可能有控件(例如 1 个文本框或 20 个复选框),因此不能简单地复制这些控件。
    • 同样的概念仍然适用,Text 属性只是一个示例,您是否尝试过迭代 Controls 属性?请参阅我的更新答案。
    • 其他尝试,使用您的代码,删除 for each 子句并以倒序遍历集合:for(int i = xTblComplete.Rows.Count - 1; i &gt;= 0;i--)
    【解决方案2】:

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2012-06-02
      • 1970-01-01
      • 2016-08-14
      • 2017-05-05
      • 2011-09-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多