2011-08-04 18 views
2

私は10行を含むデータテーブルを持っています。いくつかの条件で指定された位置に11行目を挿入する必要があります。どのようにデータテーブル内の任意の位置に行を挿入するのですか?

私はInsertAtメソッドを試しましたが、「この行は既に別のテーブルに属しています」というエラーが表示されます。

私はImportRowメソッドを使用できません。これは単に行をデータテーブルにインポートして、既存の行の最後に行を挿入するためです。

どうすればよいですか?親切に助けてください!

おかげ

更新されたコード

 int iCount = 0; 
     foreach (DataRow dr in dtWithBundle.Rows) 
     { 
      DataRow drClone = dtOppClone.NewRow(); 
      drClone.ItemArray = dr.ItemArray; 
      dtOpps.Rows.InsertAt(drClone, iIndex + iCount); 
      //dtOpps.ImportRow(drClone); 
      //dtOpps.Rows.Add(drClone.ItemArray); // Commented on Aug-4 2011 1700HRS 
      iCount++; 
      dtOpps.AcceptChanges(); 
     } 
+0

DataTablesの行には、あなたが信頼できる「位置」はありません。 SortOrderを定義します。 –

+0

ここでの位置は、InsertAtメソッドの第2引数(つまり位置)と呼ばれます。 –

+0

あなたは使用しているコードを投稿できますか? – Asdfg

答えて

9

を確認し、これを試してみてください。私はあなたが得るエラーは、あなたがNewRowを作成していないということです。

DataTable dt = new DataTable(); 
    dt.Columns.Add("Name", typeof(string)); 

    DataRow dr; 
    dr = dt.NewRow(); 
    dr[0] = "A"; 
    dt.Rows.Add(dr); 

    dr = dt.NewRow(); 
    dr[0] = "C"; 
    dt.Rows.Add(dr); 

    dr = dt.NewRow(); 
    dr[0] = "B"; 
    dt.Rows.InsertAt(dr,1); 

    foreach (DataRow d in dt.Rows) 
    { 
     Console.WriteLine(d[0].ToString()); 

    } 

    Console.Read(); 
+0

質問が更新されました!私は新しい行を作成しています。 –

0

AのDataTableには、SQLテーブルのようなものです。それは実際に物理的な位置の概念を持っていません。あなたは行のセットを取得するときにそれをしたい方法をソートする値を行に与えなければなりません。

[編集]ドキュメントは少し不透明である:

InsertAtで指定された場所のみDataRowCollectionの行の順で反射されます。 DataRow配列に複数の行が返された場合、挿入された行は、InsertAtで指定された場所に返されないことがあります。詳細情報については

DataRowCollection.InsertAt Method

+0

それはクールに聞こえるが、それを行う方法は? –

+0

ColumnAには 'aa'、 'bb'、 'cc'などの値が含まれています。ColumnAで並べ替えるときに新しい行をセットの末尾に配置する場合は、ColumnAに 'zz'の値を与えます。 –

関連する問題