C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[8]: コントロールの動的追加


(過去ログ 84 を表示中)

[トピック内 13 記事 (1 - 13 表示)]  << 0 >>

■50272 / inTopicNo.1)  コントロールの動的追加
  
□投稿者/ こん (15回)-(2010/06/02(Wed) 09:47:25)

分類:[VB.NET/VB2005 以降] 

質問させていただきます。

tbl_kensaテーブルに各検査の結果値を登録するシステムを開発しています。
フォームにテキストボックス(数値のみ入力可能)を検査数分配置し、登録ボタンでデータベースへ登録します。

ここまでは構築できましたが、今後検査が増えたり、減ったりする可能性があり検査の登録・削除をユーザーに行ってもうらうようにしたいです。
そのためには、データベースへフィールドの追加、コントロールの動的追加(そのコントロールに対するイベントも動的に作成する必要がある)、登録する際のSQL分も動的に作らなければならないと思います。

データベース
tbl_kensa 各検査値を格納。検査項目が増える可能性がある。
tbl_kensamaster 検査マスタ tbl_kensaのフィールド名と日本語名を保持。SELECT文を動的に作成できる?

コントロール
各検査フィールド分フォームに配置。未入力可。
登録ボタン押下各テキストボックスの値をデータベースに登録します。

コントロールの動的追加やSQL文の動的作成は可能でしょうか。
引用返信 編集キー/
■50273 / inTopicNo.2)  Re[1]: コントロールの動的追加
□投稿者/ エクシ (21回)-(2010/06/02(Wed) 09:59:58)
No50272 (こん さん) に返信
できるけど、できるかどうかを質問してるレベルの人なら
DataGridView とかにまとめてしまった方が早いんじゃないの?
引用返信 編集キー/
■50274 / inTopicNo.3)  Re[2]: コントロールの動的追加
□投稿者/ こん (16回)-(2010/06/02(Wed) 10:17:06)
No50273 (エクシ さん) に返信
> ■No50272 (こん さん) に返信
> できるけど、できるかどうかを質問してるレベルの人なら
> DataGridView とかにまとめてしまった方が早いんじゃないの?

DataGridViewですか。ただそれだと検査数が30、40になった時ずらっと横並びしてしまうのは使い辛いです。
DataGridViewを縦に使用して10個すつならべるとか出来るといいんですが。



引用返信 編集キー/
■50275 / inTopicNo.4)  Re[1]: コントロールの動的追加
□投稿者/ みきぬ (904回)-(2010/06/02(Wed) 10:21:50)
No50272 (こん さん) に返信
> tbl_kensaテーブルに各検査の結果値を登録するシステムを開発しています。
> フォームにテキストボックス(数値のみ入力可能)を検査数分配置し、登録ボタンでデータベースへ登録します。
>
検査値は、1つの検査に対して単一の数値だと思っていいのかな?

> データベース
> tbl_kensa 各検査値を格納。検査項目が増える可能性がある。
> tbl_kensamaster 検査マスタ tbl_kensaのフィールド名と日本語名を保持。SELECT文を動的に作成できる?
>
であれば、まずはテーブル設計を見直したほうがいいと思う。
検査項目が増えたときにフィールドを追加するんじゃなくて、レコード追加だけで対応できるように。
(横持ちじゃなくて縦持ちにする、と言えばいいのかな)

表示を縦に並べてやりたいのなら尚更。
引用返信 編集キー/
■50277 / inTopicNo.5)  Re[2]: コントロールの動的追加
□投稿者/ こん (17回)-(2010/06/02(Wed) 10:43:56)
No50275 (みきぬ さん) に返信
> ■No50272 (こん さん) に返信
>>tbl_kensaテーブルに各検査の結果値を登録するシステムを開発しています。
>>フォームにテキストボックス(数値のみ入力可能)を検査数分配置し、登録ボタンでデータベースへ登録します。
>>
> 検査値は、1つの検査に対して単一の数値だと思っていいのかな?
そうです。ただ、ほかに検査日やbit型のデータもテーブルに格納しています。
>
>>データベース
>>tbl_kensa 各検査値を格納。検査項目が増える可能性がある。
>>tbl_kensamaster 検査マスタ tbl_kensaのフィールド名と日本語名を保持。SELECT文を動的に作成できる?
>>
> であれば、まずはテーブル設計を見直したほうがいいと思う。
> 検査項目が増えたときにフィールドを追加するんじゃなくて、レコード追加だけで対応できるように。
> (横持ちじゃなくて縦持ちにする、と言えばいいのかな)

すみませんが、いまいちわかりません。
tbl_kensaのフィールドを
kensa_name(検査名)、kensa_value(検査値)とかにするってことですか?

検査が増えたらtbl_kensamasterに
kensa_name(検査名)、kensa_japname(表示用日本語検査名)、kensa_type(型)

増えたらtbl_kensamasterに追加し、検査値登録の際はコンボボックスか何かでtbl_kensamasterの検査名を選ぶような感じ?

でもこれだと一つのレコードに検査が一つという感じになりそうですが。
>
> 表示を縦に並べてやりたいのなら尚更。
縦に並べることは可能なのですか?
引用返信 編集キー/
■50280 / inTopicNo.6)  Re[3]: コントロールの動的追加
□投稿者/ やじゅ (1624回)-(2010/06/02(Wed) 12:41:32)
やじゅ さんの Web サイト
No50277 (こん さん) に返信

XML形式にして1項目に格納してしまうとか

<8 月 29 日 (金) 最優秀セッション>
業務データを 1 テーブル 1 カラムに集約しちゃおう
http://blogs.msdn.com/devamm/archive/2008/09/19/8958396.aspx

引用返信 編集キー/
■50282 / inTopicNo.7)  Re[4]: コントロールの動的追加
□投稿者/ こん (18回)-(2010/06/02(Wed) 13:07:44)
No50280 (やじゅ さん) に返信
> ■No50277 (こん さん) に返信
>
> XML形式にして1項目に格納してしまうとか
>
> <8 月 29 日 (金) 最優秀セッション>
> 業務データを 1 テーブル 1 カラムに集約しちゃおう
> http://blogs.msdn.com/devamm/archive/2008/09/19/8958396.aspx
>

XMLですか。扱ったことないですわ…。
引用返信 編集キー/
■50283 / inTopicNo.8)  Re[3]: コントロールの動的追加
□投稿者/ みきぬ (905回)-(2010/06/02(Wed) 13:08:31)
自分のイメージをざっくり書いておきます。

検査テーブル(ひとかたまりの検査で1レコード)
・検査ID(PK)
・検査名

検査詳細テーブル(検査の中の個々の項目で1レコード)
・検査ID(PK)
・検査項目ID(PK)
・検査値

検査項目マスタ(検査項目ごとに1レコード。従来の tbl_kensamaster に近い存在)
・検査項目ID(PK)
・検査項目名
(・検査値の型)

> > 表示を縦に並べてやりたいのなら尚更。
> 縦に並べることは可能なのですか?

DataGridView を使うなら、検査詳細テーブルから検査IDを条件にレコード取得した結果をそのままバインドする感じ。
あるいは、検査項目のラベルと検査値を入力する欄をユーザーコントロールにまとめて、それをレコード数ぶん FlowLayoutPanel に詰め込んでいく感じ。

引用返信 編集キー/
■50288 / inTopicNo.9)  Re[4]: コントロールの動的追加
□投稿者/ こん (19回)-(2010/06/02(Wed) 13:56:49)
No50283 (みきぬ さん) に返信
ありがとうございます。

自分の理解だと

検査テーブル  ←検査グループのようなもの
検査詳細テーブル←各検査項目。どのグループに属するか検査IDで判別。
検査項目マスタ ←フォーム表示、選択用に検査項目の名称を登録。

@検査IDを指定しDataGridViewにバインド 
 DataGridViewに表示した際に検査項目IDが表示されてしまうのでこれを名称にするには、1件ずつSELECTするしかないですか?
Adatatable.updateで更新。

その他、検査日や会社コードといったフィールドがあり、一覧表示機能で検査日の年、月で集計しています。また会社別の合計数なども出したいのですが、これらの項目についてはどのように取り扱うのがベターですか?
引用返信 編集キー/
■50289 / inTopicNo.10)  Re[5]: コントロールの動的追加
□投稿者/ みきぬ (907回)-(2010/06/02(Wed) 14:03:05)
No50288 (こん さん) に返信

> DataGridViewに表示した際に検査項目IDが表示されてしまうのでこれを名称にするには、1件ずつSELECTするしかないですか?

っ「JOIN」

> その他、検査日や会社コードといったフィールドがあり、一覧表示機能で検査日の年、月で集計しています。また会社別の合計数なども出したいのですが、これらの項目についてはどのように取り扱うのがベターですか?

いやあ、さすがにその辺はご自分で考えられたほうがいいと思いますよ。
楽しみを奪ってしまうのも悪いし。
引用返信 編集キー/
■50290 / inTopicNo.11)  Re[6]: コントロールの動的追加
□投稿者/ こん (20回)-(2010/06/02(Wed) 14:11:25)
No50289 (みきぬ さん) に返信
JOINがありましたね。
安易にお聞きしてしまい申し訳ないです。

検査日などは錯綜していい方法が思いつかないんですが、集計するとなるとやっぱり各レコードに会社コードと検査日を入れるしかないんですかね。
もっと効率的な方法があればと思いました。


引用返信 編集キー/
■50293 / inTopicNo.12)  Re[7]: コントロールの動的追加
□投稿者/ みきぬ (908回)-(2010/06/02(Wed) 20:39:49)
2010/06/02(Wed) 20:40:50 編集(投稿者)

No50290 (こん さん) に返信
> 検査日などは錯綜していい方法が思いつかないんですが、集計するとなるとやっぱり各レコードに会社コードと検査日を入れるしかないんですかね。
> もっと効率的な方法があればと思いました。
>
検査日って言ってもいろいろだと思うけど、例えば「○×橋を検査する日」とかいうくくりで管理したいなら検査テーブルで持てばいいし、「この橋の超音波測定を?日にやって、微破壊検査を?日にやった」とかいうふうに管理したいなら項目ごとに持てばいいんじゃないかしら。

会社コードも、例えば「△△トンネルの検査をこの会社からお願いされた」とか「□□道路の今月の検査はこの会社に任せた」とかいうくくりなら検査テーブルで持てばいいし、「うちは覆工検査車を持ってないので、この項目は○○会社にお願いしよう」とかいう話なら項目ごとに持てばいいんじゃないのかな。

もし同じ検査を定期的に行うのであれば、検査そのものを半ばマスタみたいな存在にしてしまって、それをもとに各月の検査を登録していくっていう考え方もあるし。

とまあ、想像していくときりがないのでこの辺で。
引用返信 編集キー/
■50296 / inTopicNo.13)  Re[8]: コントロールの動的追加
□投稿者/ こん (21回)-(2010/06/03(Thu) 08:56:40)
No50293 (みきぬ さん) に返信

ありがとうございます。
頂きましたアドバイスを元に以下の仕様でいこうと思います。

カッコ内は例

検査項目マスタ
・項目コード(1)
・項目名(粉じん検査)

検査セットマスタ
・セットコード(1)
・項目コード(1)
※ほぼセットは固定されているのでユーザが新規登録等を行う可能性は低い。

検査日マスタ
・検査日ID(1)
・検査日(2010/06/01)
・事業所コード(99999999)
・事業所サブコード(1)
・出発時間(2010/06/01 09:00:00)
・開始時間(2010/06/01 10:00:00)
・終了時間(2010/06/01 17:00:00)
・帰社時間(2010/06/01 18:00:00)
・検査セットコード(1)

検査人数テーブル
・検査日ID(1)
・検査項目コード(1)
・検査人数(9)

検査人数テーブルに人数を登録する。
検査日はマスタで持つこととしました。
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -