- PR -

DataTableのPrimaryKey切替えについて

1
投稿者投稿内容
さかもと
ぬし
会議室デビュー日: 2004/05/14
投稿数: 586
投稿日時: 2006-02-16 09:29
おせわになります。
WinXP
VB.Net
WINアプリ
で開発をしています。

一つのDataTableに対し条件により2パターンの
データをセットしようとしており、その際PrimaryKey
をどのようにクリアすればよいかについて教えて頂け
ればと思います。

■条件1の場合、Columns(0)をキーにセット
Dim dt As DataTable = DsTest1.Tables("Test")
dt.Clear()
dt.PrimaryKey = New DataColumn() {dt.Columns(0)}

■条件2の場合、Columns(1)をキーにセット
Dim dt As DataTable = DsTest1.Tables("Test")
dt.Clear()
dt.PrimaryKey = New DataColumn() {dt.Columns(1)}

条件1をセットしデータ表示をした後に、条件2で
セットを行うと主キーエラーが出てしまいます。
但し、主キーエラーの後、再度条件2を処理すれば
正常にデータが表示されます。

キーをクリアすればと思い条件1処理の後に

Dim colArr() As DataColumn
colArr = DsTest1.Tables("Test").PrimaryKey
dt.PrimaryKey.Clear(colArr, 0, 1)

とクリアを行ったところ条件1を2回続けて処理
した場合2回目での主キー設定の所でオブジェクト
参照エラーとなってしまいます。

同一DataTableでの主キーを条件により変えるには
どのようにすれば宜しいでしょうか?

お願い致します。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2006-02-18 22:09
引用:

さかもとさんの書き込み (2006-02-16 09:29) より:

一つのDataTableに対し条件により2パターンの
データをセットしようとしており、


まず、ここがおかしいかと。
1つのデータ群が、時と場合によって2パターンの識別を行われる、というのが、変ではないでしょうか。
コード:

Column1 Column2 JUDGE_Column
1 0 Column1
2 0 Column1
0 1 Column2
0 2 Column3


みたいな感じ?だったら、JUDGE_Column まで含めた、3カラムで1つの主キーにすればいいでしょう。
 その後、Column1 + JUDGE_Column, Column2 + JUDGE_Column に、インデックスを張ります。

〆 written by Jitta@わんくま同盟 on 2006/02/18

[ メッセージ編集済み 編集者: Jitta 編集日時 2006-02-18 22:09 ]
さかもと
ぬし
会議室デビュー日: 2004/05/14
投稿数: 586
投稿日時: 2006-02-20 13:50
さかもとです。
Jitta様、ご返答ありがとうございました。

本件はクリスタルレポートへ渡すデータセットについてあれこれと悩んでいたのですが、
やはりおっしゃるように主キーをどうするかについて設計を見直します。
突然要望により同じ帳票レイアウトで違うデータ(総合計)を出して欲しい
とのことで主キーの切り替えがうまくいけば可能かと思い調査しておりました。

クリレポの機能による総合計では出力不可能な項目だったので無理にやってみようかと思っていましたが、相当に無理があるようなので別のレポートを作り直すなどをして対応してみたいと思います。

ただ、dt.PrimaryKey.Clear・・・についてはイマイチ理解できていないので引き続き勉強致します。

ありがとうございました。

Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2006-02-20 20:26
引用:

さかもとさんの書き込み(2006-02-20 13:50)より:

突然要望により同じ帳票レイアウトで違うデータ(総合計)を出して欲しい
とのことで主キーの切り替えがうまくいけば可能かと思い調査しておりました。

クリレポの機能による総合計では出力不可能な項目だったので無理にやってみようかと思っていましたが、相当に無理があるようなので別のレポートを作り直すなどをして対応してみたいと思います。


 どういったものか不明ですが、CrystalReports がデータベースに直に接続しているのでなければ、対応は可能だと思います。

 動的に DataTable にカラムを追加し、グループ化と、項目を「表示」するための式を使えば、いけると思います。
# 汚い、というのは目をつぶって(^-^;

〆 written by Jitta@わんくま同盟 on 2006/02/20
1

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