- ベストアンサー
DataTableから条件を満たした行を別のDatatableへコピーしたい
- VC#2005とSQLServer2005ExpressEditionでWindowsアプリケーションを作成しています。データベースの中から1つのマスタテーブルのデータを呼び出すのにTableAdapterを使ってDataTableにデータをバインドしました。
- DataTableにはカラムが3列あり、その中の1列をグループIDとしています。条件としてはグループIDが同じであるということです。
- 条件を満たしている行をすべて抽出して空のデータテーブルにコピーすることです。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
C#だったんですね … さほど変わりないと思いますが お使いのコードが提示されていないのでこちらで適当な変数をでっち上げております 現在お使いのコードを支障の無い範囲で提示しましょう //元のデータテーブルがdtSourceとすると // テーブル構造をコピー DataTable dt = dtSource.Clone(); DataRow r = null; foreach( DataRow dtRow in dtSource.Select("選択するための文字列")) { r = dt.NewRow(); for( int n = 0; n < dtRow.ItemArray.Length; n++ ) { r[n] = dtRow[n]; } dt.Rows.Add( r ); } といった具合になると思います # 前回の投稿中のstSorceはdtSourceの単なるミスです
その他の回答 (1)
- redfox63
- ベストアンサー率71% (1325/1856)
ソースのDataTableのCloneメソッドでテーブル構造をコピーして SelectメソッドでRowコレクションを取得 これを For Eachでループしてやればコピーできますよ dim dt as DataTable dim r as DataRow dt = dtSource.Clone for each rowSource DataRow in stSource.Select( "選択対象列=選択データ") r = dt.NewRow for n as integer = 0 to rowSource.ItemArray.Length - 1 r(n) = rowSource(n) next dt.rows.add( r ) next といった具合でしょう
補足
せっかくソースを書いて頂いてますが、VBみたいですね。 VBでは「rowSource」や「stSource」をいった宣言外のものが使えるんでしょうか? 私はVBはわからないのですが、これはちょっと応用できそうにありません。 ありがとうございました。
お礼
> C#だったんですね … さほど変わりないと思いますが 質問の最初に書いたんですが、わかりにくかったでしょうか。 すいません、今後質問するときはもっとわかりやすく書くよう努めます。 今回のはかなり参考になりました。ありがとうございます。 今度はforeach( DataRow dtRow in dtSource.Select("選択するための文字列"))の("選択するための文字列")で詰まってしまいました。 実際にはその位置にint型の変数を入れたかったのです。 実行すると例外が返ってきたり実行時エラーになったりで結構はまってしまいましたが("比較するカラム名 =" + 変数名)で上手くいきました。 これで何とか次の状態遷移に移れそうです。 ありがとうございました。