アプリ版:「スタンプのみでお礼する」機能のリリースについて

以下のソースで、「この行は既に別のテーブルに属しています。」というエラーが出てしまいますが、対処方法がわかりません。

どのようにしたらよろしいでしょうか?
VS2003のVBです。

    Dim Table1 As DataTable = Me.DS1.Tables("データベース1")
    Dim Table2 As DataTable = Me.DS1.Tables("データベース2")
    Dim Row1 As DataRow
    Dim Row2 As DataRow
    Row1("データ1") = 1
    Row1("データ2") = 2
    Row1("データ3") = 3
    Row2("データ1") = 2
    Row2("データ2") = 3
    Row2("データ3") = 4

    Table2.Rows.Add(Row2) ←ここでエラー
    Table1.Rows.Add(Row1)

'System.ArgumentException' のハンドルされていない例外が system.windows.forms.dll で発生しました。

追加情報 : この行は既に別のテーブルに属しています。

A 回答 (2件)

お世話になります。



> Dim Row1 As DataRow
> Row1("データ1") = 1
これは、実行時に例外(NullReferenceException)が発生するはずです。

> Row1("データ1") = 1
こちらを実行する前に、
Row2 = Table1.Rows(0) とか
Row2 = Table1.NewRow とかやってると仮定して、
2 つの DataTable のレイアウトが全く同じならば
DataTable.ImportRow メソッド
を使われてはいかがでしょうか。

Dim dt As DataTable = New DataTable
dt.Columns.Add("Field1", GetType(String))
dt.Columns.Add("Field2", GetType(String))
dt.Columns.Add("Field3", GetType(String))
dt.Rows.Add(New String() {"りんご", "みかん", "ばなな"})
dt.Rows.Add(New String() {"おかし", "ごはん", "おちゃ"})

Dim copyToDt As DataTable = dt.Clone()
For Each row As DataRow In dt.Rows
  If Convert.ToString(row("Field1")) = "おかし" Then
    copyToDt.ImportRow(row)
  End If
Next

参考URL:http://msdn.microsoft.com/library/ja/default.asp …
    • good
    • 1
この回答へのお礼

この方法でできました。ありがとうございます。

お礼日時:2006/08/04 01:14

検証環境:WinXP SP2 VisualStudio.NET 2002



同じコードでやったのですが、ymdaさんと違うところでエラーが出ました。
で、エラーを解除するために以下のコードを追加しました。
    ・・・・・・・・
    Dim Row2 As DataRow
--------------------------------------
Row1 = Table1.NewRow() ここです
Row2 = Table2.NewRow()
--------------------------------------
    Row1("データ1") = 1
    Row1("データ2") = 2
    ・・・・・・・・・

これで、エラーは無くて動作します。
同じ環境ではないので、なんともいえませんが、よろしければ試してみてください。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A