0

この問題は参照型に関連していると思いますが、これらの理解が不足しています...

したがって、ASP.Net テーブルを動的に作成しました (データベースの種類ではなく、Web.UI.WebControls.Table のように) これらには、テキストを含む 1 つのセルを含む 1 つの行から、ネストされた一連のテーブルとコントロール全体まで、状況に応じて何でも含めることができます。クライアント。

各 TableRow をループする必要があります。特定の条件が満たされた場合、その行を 2 番目の 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 の行) がエラーをスローすることです。「コレクションが変更されました。列挙操作が実行されない可能性があります。」というエラーが表示されます。追加するテーブル行の COPY を作成する必要があるという点で、これは理にかなっています。

これがどのように行われるかについて誰かアドバイスできますか?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 に答える