- - PR -
DataTableで先頭にカラムを追加したい
1|2|3
次のページへ»
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2005-08-06 19:37
こんにちは。いつもお世話になっております。
もしご存知の方がいましたらご教授ください。 DBサーバからすでにDataTableにデータが 取り込まれている状態のものがあります。 このDataTableの先頭フィールドにカラムを追加したいのですが、 どのようにしたらいいのでしょうか? dt.Columns.Add(***); だと最後尾に追加されてしまいます。 簡単ではありますが何かヒントとなるようなことでも 知っている方がいましたら、よろしくお願いします。 VS.NET 2003 C#, WinXP Proにて開発を行っています。 | ||||
|
投稿日時: 2005-08-07 00:28
なんか無さそうな感じですね。 代替案として、 1.データベースから抜いてくるときにダミーで先頭カラムを作成しておく。 (あらかじめ、ダミーのカラム数がわかっている必要があります。) 2.先頭にカラムを追加した新しいデータテーブルを作成し、そこにデータを持っていく。 でも、そもそも、どうして先頭に追加しなければならないんでしょうか? | ||||
|
投稿日時: 2005-08-07 06:31
DataTableではできませんが
trapemiyaさんの指摘のように、やりたいことの本質は、 DataTableの先頭にカラムを追加することとは違うんじゃないでしょうか。 表示順序を制御したいなら、Gridなどの表示コントロール側でやればいいですし。 #表示が単一の場合、データが表示と同じ順序になっていれば簡単ではあるけど・・・ 本当の目的も書いておくと、もっと違ういい方法が教えてもらえるかもしれませんよ。 | ||||
|
投稿日時: 2005-08-07 10:45
trapemiyaさん、ほげたさんご返答ありがとうございます。
今回、DataTableの先頭にカラムを追加したかった目的は、 1.データを取得する関数は共通化されているため、 ダミーカラムを作ることは出来ない。 2.データを表示したいのではなく、データを編集したい。 3.データを編集する際に、(1)でとってきた状態に対して、 先頭に2つカラムが必要になる。 4.1−3を今までは、データベース上にTempテーブル(先頭に2つカラム追加)を作成し、 INSERT⇒SELECTの処理を行っていた。 のことが前提となります。 問題点は、(4)の処理でデータが大量になってしまうと、 非常に時間がかかっていることです。 あまり時間が無いため、設計をかえることもできず、 なんとかデータベースにアクセスせず、 メモリ上で処理することでスピードアップを狙っていました。 現在、trapemiyaさんの代替案(2)でデータベースにアクセスしないでいいように、 とりあえずの改修はできました。(これでもだいぶ早くなりました。) が、もっとスマートに出来ないかと思い、相談させて頂きました。 きちんと目的をかかず、 返答しづらい状態で申し訳ありませんでした。 | ||||
|
投稿日時: 2005-08-07 13:05
ちょっと私が勘違いしているのかもしれませんが、ダミーカラムとは、例えば、 select '' as dummy1, '' as dummy2, * from テーブル のような感じで、必要になった時にデータテーブルを再作成するということです。 運用的にこれで逃げられれば、これがパフォーマンス的にも有利かもしれません。 | ||||
|
投稿日時: 2005-08-07 15:25
trapemiyaさん、たびたび返答ありがとうございます。 私のダミーカラムの認識もtrapemiyaさんと同じです。 共通化されているということしか書いていないので誤解を招いてしまったようですが、 この共通化されている関数は条件(WHERE句)を渡すと、 データセットが返ってくるといような感じです。 そのデータセットのカラムがこちらから指定できず、 決まった形(カラム・カラム順)で返ってきます。 さらにややこしいことにこの関数は他社さんの担当部分であり、 中身は完全にブラックボックスです。。 根本的な見直しが必要なことは理解しております。 が、実際すでにこの関数の変更依頼をすることは時期的に不可です。 とてもおかしな条件でのご質問でもうしわけありませんが、 いろいろなアドバイスほんとうにありがとうございます。 | ||||
|
投稿日時: 2005-08-08 08:48
> 4.1−3を今までは、データベース上にTempテーブル(先頭に2つカラム追加)を作成し、
> INSERT⇒SELECTの処理を行っていた。 これの性能が問題とのことなので、実表ではなくてビュー表にしたらどうでしょうか? CREATE VIEW name [ ( column_name [, ...] ) ] AS select '' as dummy1, '' as dummy2, * from 実表 | ||||
|
投稿日時: 2005-08-08 09:57
なるほど。そういう事情があったのですね。わかりました。 ところで、ADO.NET 2.0のAddを調べてみたのですが、そのオーバーロードを見る限り、不可能のようです。また、DataView.ToTable メソッドで、ダミーカラムを作ろうとしてみたのですが、認めてくれませんでした。orz |
1|2|3
次のページへ»