- PR -

配列の内容を一気にDataTableにセットしたい

1
投稿者投稿内容
さくら
ベテラン
会議室デビュー日: 2004/02/12
投稿数: 76
投稿日時: 2004-08-30 17:06
現在、ASP.NET(VB.NET)を用いてWEBアプリを開発しています。

一次元配列が3つあり、3つとも行数は同じです。
それをDataTableの各列にそれぞれセットして
3列の表形式にしたいのですが、
配列を一気にDataTableにセットする方法を探しています。

*****************************************************************

配列1   配列2   配列3
-------------------------------
1     みかん   5個
2     りんご   2個
3     バナナ   3個
4     イチゴ   8個
5     ぶどう   1個

これをDataTableに一気にセットして下記表のようにしたい。

列1  列2    列3
----------------------------
1   みかん   5個
2   りんご   2個
3   バナナ   3個
4   イチゴ   8個
5   ぶどう   1個

*****************************************************************

何かご存知のことなどがありましたら
ぜひご教授お願い致します。
burton999
ぬし
会議室デビュー日: 2003/10/06
投稿数: 898
お住まい・勤務地: 東京
投稿日時: 2004-08-30 17:22
>一気にDataTableにセットする
というのはメソッド一発でってことでしょうか?
だとしたら無理なので普通にループで処理するのが一番かと。
さくら
ベテラン
会議室デビュー日: 2004/02/12
投稿数: 76
投稿日時: 2004-08-30 17:36
ループ処理をせずに1回でセットできる術がないかを探しておりました。
1回でDataTableにセット出来れば最も良いのですが、
憶測ではありますが、それは無理だろうと思ったので、
各配列をそれぞれDataTableの各列にセットするという意味で
3回でセット出来ればと思っております。
これなら出来るんじゃないかという期待を持っていたのですが
今のところ、まだ方法が見つかっておりません…。
もし何かありましたらぜひご教授お願い致します。
小野@どっとねっとふぁん
ぬし
会議室デビュー日: 2001/10/30
投稿数: 402
投稿日時: 2004-08-30 19:53
dtという名前のDataTableがあって、ar1、ar2、ar3という
配列があるとしたら、

DataRow dr = dt.NewRow();
dr.ItemArray = new object[] { ar1[i], ar2[i], ar3[i] };
dt.Rows.Add(dr);

こんな感じでfor文でiをインクリメントしてあげたら
とりあえずできるんじゃないかな。

#参考になるかどうか。。。
http://homepage3.nifty.com/dotnetfan/console/console17.html
えムナウ
大ベテラン
会議室デビュー日: 2004/06/10
投稿数: 187
お住まい・勤務地: 東京
投稿日時: 2004-08-30 20:11
こちらのコンストラクタが例になるかと思います。
http://www.geocities.jp/mnow/cs_dataset3.html

_________________
えムナウ Microsoft MVP for Visual Developer - C#,2005/01-2007/12
えムナウのプログラミングのページ Blog1 Blog2
さくら
ベテラン
会議室デビュー日: 2004/02/12
投稿数: 76
投稿日時: 2004-08-31 15:29
お返事ありがとうございます。
私がやりたいと思っていた処理のイメージは、
ループ処理をせずに一気に配列をDataTableに流し込む
という姿を思い描いていたのですが、
やはりループで1行ずつ作っていくしか無さそうですね。
参考ページの紹介等を見ながら作ります!
ありがとうございました!!
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-08-31 17:17
引用:

さくらさんの書き込み (2004-08-31 15:29) より:

私がやりたいと思っていた処理のイメージは、
ループ処理をせずに一気に配列をDataTableに流し込む
という姿を思い描いていたのですが、
やはりループで1行ずつ作っていくしか無さそうですね。


 どこかではループしなければなりませんが、使わせるところではループしないようにすることは可能ですよ。

 例えば、3列N行の配列を受け取るコンストラクタを作り、コンストラクタ内ではループしますが、コンストラクタの呼び出しは、ループする必要はありません。

コード:
public class rowData inherits ArrayList {
  public rowData(Object[] arr) {
    配列のサイズが3でなければエラー
    配列の内容をコピーする
  }
}

public class tableData inherits ArrayList {
  public tableData(Object[] arr) {
    foreach (itm in arr) {
      itmをrowDataにキャストできなければエラー、
      または、rowDataのコンストラクタがエラーを出せばエラー
      itmをコピー
    }
  }
}


こんな感じかな?おおざっぱなので、しっかり見直してもらうとして、次のように使えると思います。
コード:
tableData tbl = new TableData(
  new Object[] {
    new Object {1,2,3},
    new Object {11, 12, 13},
    new Object {21, 22, 23}, ...
  }
);

さくら
ベテラン
会議室デビュー日: 2004/02/12
投稿数: 76
投稿日時: 2004-09-06 11:06
お返事ありがとうございます。

プログラムの組み方次第でいろいろな方法ができるんですね!
教えていただいた方法を早速使ってみたいと思います。
ありがとうございました!
1

スキルアップ/キャリアアップ(JOB@IT)