dポイントプレゼントキャンペーン実施中!

VC#2005とSQLServer2005ExpressEditionでWindowsアプリケーションを作成しています。

データベースの中から1つのマスタテーブルのデータを呼び出すのにTableAdapterを使ってDataTableにデータをバインドしました。
そこから条件を満たしている行をすべて抽出して同じ型のDataTableにデータをコピーしたいのです。

ですから、DataTableは2つ用意しています。1つは上記の通りデータをバインドしていますが、もう1つは宣言しただけなのでまだ空っぽの状態です。
DataTableにはカラムが3列あり、その中の1列をグループIDとしています。
条件としてはグループIDが同じであるということです。
やりたいことは条件を満たしている行をすべて抽出して空のデータテーブルにコピーすることです。

どなたかご存知の方いらっしゃれば教えてください。
よろしくお願いします。

A 回答 (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の単なるミスです
    • good
    • 2
この回答へのお礼

> C#だったんですね … さほど変わりないと思いますが
質問の最初に書いたんですが、わかりにくかったでしょうか。
すいません、今後質問するときはもっとわかりやすく書くよう努めます。
今回のはかなり参考になりました。ありがとうございます。

今度はforeach( DataRow dtRow in dtSource.Select("選択するための文字列"))の("選択するための文字列")で詰まってしまいました。
実際にはその位置にint型の変数を入れたかったのです。

実行すると例外が返ってきたり実行時エラーになったりで結構はまってしまいましたが("比較するカラム名 =" + 変数名)で上手くいきました。
これで何とか次の状態遷移に移れそうです。
ありがとうございました。

お礼日時:2008/10/29 15:19

ソースの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はわからないのですが、これはちょっと応用できそうにありません。
ありがとうございました。

補足日時:2008/10/29 09:15
    • good
    • 0

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

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


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