- - PR -
DataTableのPrimaryKey切替えについて
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 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での主キーを条件により変えるには どのようにすれば宜しいでしょうか? お願い致します。 | ||||||||
|
投稿日時: 2006-02-18 22:09
まず、ここがおかしいかと。 1つのデータ群が、時と場合によって2パターンの識別を行われる、というのが、変ではないでしょうか。
みたいな感じ?だったら、JUDGE_Column まで含めた、3カラムで1つの主キーにすればいいでしょう。 その後、Column1 + JUDGE_Column, Column2 + JUDGE_Column に、インデックスを張ります。 〆 written by Jitta@わんくま同盟 on 2006/02/18 [ メッセージ編集済み 編集者: Jitta 編集日時 2006-02-18 22:09 ] | ||||||||
|
投稿日時: 2006-02-20 13:50
さかもとです。
Jitta様、ご返答ありがとうございました。 本件はクリスタルレポートへ渡すデータセットについてあれこれと悩んでいたのですが、 やはりおっしゃるように主キーをどうするかについて設計を見直します。 突然要望により同じ帳票レイアウトで違うデータ(総合計)を出して欲しい とのことで主キーの切り替えがうまくいけば可能かと思い調査しておりました。 クリレポの機能による総合計では出力不可能な項目だったので無理にやってみようかと思っていましたが、相当に無理があるようなので別のレポートを作り直すなどをして対応してみたいと思います。 ただ、dt.PrimaryKey.Clear・・・についてはイマイチ理解できていないので引き続き勉強致します。 ありがとうございました。 | ||||||||
|
投稿日時: 2006-02-20 20:26
どういったものか不明ですが、CrystalReports がデータベースに直に接続しているのでなければ、対応は可能だと思います。 動的に DataTable にカラムを追加し、グループ化と、項目を「表示」するための式を使えば、いけると思います。 # 汚い、というのは目をつぶって(^-^; 〆 written by Jitta@わんくま同盟 on 2006/02/20 |
1