DOBON.NETプログラミング道掲示板

ツリー一括表示

Nomalアイコン 同じデータセット内にテーブルの複製を作る方法 /べが (18/02/09(Fri) 14:08) #33807
Nomalアイコン Re[1]: 同じデータセット内にテーブルの複製を作る方法 /Hongliang (18/02/09(Fri) 14:17) #33808
  └Nomalアイコン Re[2]: 同じデータセット内にテーブルの複製を作る方法 /べが (18/02/09(Fri) 14:33) #33809
    └Nomalアイコン Re[3]: 同じデータセット内にテーブルの複製を作る方法 /魔界の仮面弁士 (18/02/09(Fri) 15:01) #33810
      └Nomalアイコン Re[4]: 同じデータセット内にテーブルの複製を作る方法 /べが (18/02/09(Fri) 15:52) #33811 解決み!


親記事 / ▼[ 33808 ]
■33807 / 親階層)  同じデータセット内にテーブルの複製を作る方法
□投稿者/ べが 一般人(1回)-(2018/02/09(Fri) 14:08:24)
  • アイコン環境/言語:[OS : Windows 7 / 言語 : C# / .NET Framework : 4.5] 
    分類:[.NET] 

    【解決したい問題】

    データセット内にあるテーブルの複製を同じデータセット内に作りたいのですが、うまくいきません。
    方法が間違っていると思うのですが、調べても有効な情報が得られませんでした。
    ご教授頂ければ有難いです。

    【解決するために何をしたか】

    データセット「ds」の中にテーブル「dt1」があり、新たに「dt2」を追加して
    構造と内容を「dt1」からコピーするため、以下のようなコードを書いたのですが、

    DataTable dtTemp = ds.Tables.Add("dt2");
    dtTemp = ds.Tables["dt1"].Copy();
    ds.Tables["dt2"] = dtTemp.Copy();

    3行目の左辺で「プロパティまたはインデクサー'DatatableCollection.this[string]'は読み取り専用なので、
    割り当てることはできません。」というコンパイルエラーが出ます。
    直接的に「ds.Tables["dt2"] = ds.Tables["dt1"].Copy」にしたり、
    先に構造だけコピーを試みてCloneメソッドに変更しても同じでした。
違反を報告
[ □ Tree ] 返信 削除キー/

▲[ 33807 ] / ▼[ 33809 ]
■33808 / 1階層)  Re[1]: 同じデータセット内にテーブルの複製を作る方法
□投稿者/ Hongliang 大御所(540回)-(2018/02/09(Fri) 14:17:03)
  • アイコンDataSetにDataTableを追加する場合は、.Tables.Add(DataTable)を使用します。
    なので
    > DataTable dtTemp = ds.Tables.Add("dt2");
    は不要です。

    .Tables[String] で使用する名前は、DataTableのTableNameプロパティです。
    .Tablesに格納されるDataTable間でTableNameの重複は許されていないので、.Tables.Addする前に、CopyしたDataTableのTableNameを変更しておきます。
違反を報告
[ 親 33807 / □ Tree ] 返信 削除キー/

▲[ 33808 ] / ▼[ 33810 ]
■33809 / 2階層)  Re[2]: 同じデータセット内にテーブルの複製を作る方法
□投稿者/ べが 一般人(3回)-(2018/02/09(Fri) 14:33:30)
  • アイコン回答ありがとうございます。

    回答の内容が今一つ理解できないのですが、こういう事でしょうか?
    ds.Tables.Add("dt2");
    ds.Tables["dt2"] = ds.Tables["dt1"].Copy();
    これだと先述のエラーで動きませんし、

    ds.Tables["dt1"].Copy();
    ds.Tables.Add("dt2");
    これだと、当然ながらdt2に何も入りません。


    No33808に返信(Hongliangさんの記事)
    > DataSetにDataTableを追加する場合は、.Tables.Add(DataTable)を使用します。
    > なので
    >>DataTable dtTemp = ds.Tables.Add("dt2");
    > は不要です。
    >
    > .Tables[String] で使用する名前は、DataTableのTableNameプロパティです。
    > .Tablesに格納されるDataTable間でTableNameの重複は許されていないので、.Tables.Addする前に、CopyしたDataTableのTableNameを変更しておきます。
違反を報告
[ 親 33807 / □ Tree ] 返信 削除キー/

▲[ 33809 ] / ▼[ 33811 ]
■33810 / 3階層)  Re[3]: 同じデータセット内にテーブルの複製を作る方法
□投稿者/ 魔界の仮面弁士 大御所(1106回)-(2018/02/09(Fri) 15:01:14)
  • アイコンNo33809に返信(べがさんの記事)
    >>.Tablesに格納されるDataTable間でTableNameの重複は許されていないので、.Tables.Addする前に、CopyしたDataTableのTableNameを変更しておきます。
    > 回答の内容が今一つ理解できないのですが、こういう事でしょうか?

    こういうことです。

    DataTable dt2 = ds.Tables["dt1"].Copy();
    dt2.TableName = "dt2";
    ds.Tables.Add(dt2);
違反を報告
[ 親 33807 / □ Tree ] 返信 削除キー/

▲[ 33810 ] / 返信無し
■33811 / 4階層)  Re[4]: 同じデータセット内にテーブルの複製を作る方法
□投稿者/ べが 一般人(4回)-(2018/02/09(Fri) 15:52:50)
  • アイコンできました!

    予備知識と読解力不足で申し訳ありませんでした。
    ありがとうございました。


    >
    > こういうことです。
    >
    > DataTable dt2 = ds.Tables["dt1"].Copy();
    > dt2.TableName = "dt2";
    > ds.Tables.Add(dt2);
解決み!
違反を報告
[ 親 33807 / □ Tree ] 返信 削除キー/


Mode/  Pass/


- Child Tree -