2011-08-12 23 views
1

次の例では、2行を返します。また、importrowは例外をスローしませんが、foreachの後にdatatableが表示され、2行もあるはずです。ImportRowが動作していません

foreach (int refmDossierId in distinctREFMDossierIds) 
{ 
    DataRow[] datarows = 
        _uc090_WingsIntegrationDataSet.WingsBookingInterface.Select("REFMDossierID =" + refmDossierId); 
    if(datarows.Length>0) 
    { 
     foreach(DataRow dr in datarows) 
     { 
      _uc090_WingsIntegrationDataSet.WingsBookingInterface.Clear(); 
      _uc090_WingsIntegrationDataSet.WingsBookingInterface.ImportRow(dr); 
     } 
    } 

    //2.  foreach master row 
    foreach (UC090_WingsIntegrationDataSet.WingsBookingInterfaceRow row in _uc090_WingsIntegrationDataSet.WingsBookingInterface.Rows) 
    { 
+0

私は、問題は、私は内部でクリアされたことだと思いましたforeach、私はforeachの前にその行を移動しましたが、まだ動作していませんが、foreachに2回入りますが、最後はデータテーブルが空です。 –

+0

私が見る1つの問題は、すべてのインポートの前にテーブルをクリアしていることです。しかし、 '_uc090_WingsIntegrationDataSet.WingsBookingInterface'と' UC090_WingsIntegrationDataSet.WingsBookingInterfaceRow'が何であるか、そして最初のステップで 'DataRow'を使用し、2番目のステップでカスタムタイプを使用する理由について少し説明しておきます。 – Tim

+0

実際、私は1つの行を期待していましたが、私はそれを修正しましたが、まだ行は見えません。これらは型付きのデータセットです。データテーブルをフィルタリングしてから、結果を反復処理するだけです。 –

答えて

4

ちょうど予感ができますが、デタッチ状態にあるとのDataRowコレクションを引き起こしているからあなたが行のコレクションを持ってテーブルをクリアしていることかもしれないという事実?その場合は、同じスキーマを持つ新しいDataTableを作るためにCloneを試してみてください、ない行は、次に行うImport:あなたは、現在のコードがで、最初のIDの後にテーブルを拭くでしょうね

foreach (int refmDossierId in distinctREFMDossierIds) 
{ 
    DataTable tempTable = _uc090_WingsIntegrationDataSet.WingsBookingInterface.Clone(); 

    DataRows[] datarows = _uc090_WingsIntegrationDataSet.WingsBookingInterface.Select("REFMDossierID = " + refmDossierId); 

    if (datarows.Length > 0) 
    { 
     foreach(DataRow dr in datarows) 
     { 
      tempTable.ImportRow(dr); 
     } 
    } 

    foreach (UC090_WingsIntegrationDataSet.WingsBookingInterfaceRow row in tempTable.Rows) 
    { 
     // Do your processing here 
    } 
} 

あなたが扱っているIDが複数ある場合は問題になる可能性があります。

0

ティムは正しいです。例。シンプルなフォーム(C#のコーディング)上記の回答のように見ることができ

Private Sub SortAddress(ds As DataSet) 

     Dim sourceTable As DataTable = ds.Tables(0) 


     Dim targetTable As DataTable = ds.Tables(0).Clone() 

     Dim sorted = sourceTable.Rows.Cast(Of DataRow)().OrderBy(Function(row) _ 
                    _matchFirstNumberRegEx.Match(row("Col1")).Value) _ 
                 .ThenBy(Function(row) _ 
                    _matchFirstNumberRegEx.Replace(row("Col1"), "")).ToList() 

     ds.Tables.Remove(ds.Tables(0)) 

     For Each row In sorted 

      targetTable.ImportRow(row) 
     Next 

     ds.Tables.Add(targetTable) 

    End Sub 
0

:ちょうど他の人を助けるために

string dt1Query = "SELECT ColumnName FROM tableName"; 
DataTable dt1 = new DataTable(); 
using (SqlCommand cmd = new SqlCommand(dt1Query, objConn)) 
{ 
    dt1.Load(cmd.ExecuteReader()); 
} 

DataTable dt2 = dt1.Clone(); 

foreach (DataRow dt1Row in dt1.Rows) 
{ 
    // some code here if need to work anything out before writing to dt2 
    dt2.ImportRow(dt1Row); 
} 

..

関連する問題