- PR -

Winフォームにおける画面要素の保持の仕方について

投稿者投稿内容
やす
会議室デビュー日: 2008/06/11
投稿数: 7
投稿日時: 2008-06-13 10:45
DbDataAdapterのFillSchemaというメソッドですね。
知りませんでした。

このあたりをうまく使えれば、ソースコードの量はかなり減らせそうです。

データ構造の作り方について、皆さんがどういう方法を取っているのか、
画面の仕様によると思いますが、教えてください。

 DataTableを作成している(列定義の作成方法は?)
 何かフレームワーク的なものがある
 画面のコントロールを直接参照する

など



[ メッセージ編集済み 編集者: やす 編集日時 2008-06-13 10:48 ]

[ メッセージ編集済み 編集者: やす 編集日時 2008-06-13 11:17 ]
やす
会議室デビュー日: 2008/06/11
投稿数: 7
投稿日時: 2008-06-16 18:37
現在プログラミングASP.NET 2.0という内容と価格が有難い本で勉強中ですが、

DataAdapterのFillSchemaメソッドや、Updateメソッドなど、データベースの情報を
取得するメソッドをどの程度使うかで、プログラムの構成が決まりそうです。

その本の著者はFillSchemaは、パフォーマンスの面で問題があるので、スキーマは
コードで設定したほうが良いとかいていました。(20倍程度差があるそうです)

個人的には実運用で耐えられるパフォーマンスが出るなら、使ってよいと思いますが。

この辺の便利なメソッドを使っていきつつ、パフォーマンスに問題がある部分を
コード作成に切替えていく、というのが良いかと思っています。

しかしUpdateメソッドは便利です。
ぴんふ
ベテラン
会議室デビュー日: 2006/07/13
投稿数: 80
投稿日時: 2008-06-18 10:41
引用:

データ構造の作り方について、皆さんがどういう方法を取っているのか、
画面の仕様によると思いますが、教えてください。



いろいろあるとは思いますが
1.テーブル定義クラス・構造体を自作する
2.型指定Datasetを利用
とかでしょうか。(2は業務で使ったことはないですが)

2については
http://uchukamen.com/Programming3/Access/
に解説・使用法があります。(C#、Windowsアプリの解説ですが、Webアプリでも探せばいっぱいあると思います)
テッテ
ベテラン
会議室デビュー日: 2008/03/16
投稿数: 91
投稿日時: 2008-06-18 12:03
引用:

現在プログラミングASP.NET 2.0という内容と価格が有難い本で勉強中ですが、


どうでもいいことかも知れませんが、ちょっと気になりました。
Win フォームって書いてありますが ASP.NET?
もしかしてプログラミング ADO.NET 2.0 の方でしょうか?

引用:

データ構造の作り方について、皆さんがどういう方法を取っているのか、
画面の仕様によると思いますが、教えてください。


私は型付きデータセットを使っています。
問題が全くないとは言いませんが、やはり Visual Studio のフォームデザイナとの親和性が高いので、
その恩恵を受けられるメリットは大きいと考えます。

使ったことはありませんが、iBATIS.NET というフレームワークは検討してみたことがあります。
これも使いやすそうな感じでした。

引用:

ただし型付きのデータセットを画面のデータ構造として利用すると、ヌル制約や、
データ型の制約が厳しすぎる画面もあります。

特にDataTableをデータソースとしてバインドする場合は、ユーザ入力が禁止する
値だったときに値がDataTableに代入できなくなってしまう。


そもそも禁止する値(不適切な値という意味ですよね?)だったら
データソースに代入される前に検証しています。
DataGridView だったら CellValidating イベントで。

引用:

DataTableの列定義を自分で行い、DataAccessClassはデータベースの値を
自分で定義したDataTableに格納する。
(DataAdapter.Fillではなく、DataReaderをループしながら格納していく?)


この部分に関しては、DataTable.Load という便利なメソッドがありますね。
ぴんふ
ベテラン
会議室デビュー日: 2006/07/13
投稿数: 80
投稿日時: 2008-06-18 16:08
型付き(型指定)Datasetをちゃんと試したことがなかったので、
下記環境ではありますがやってみました。(業務がたまたま暇だったんで・・・)

OS:WinXP Pro SP2
IDE:VS2003
言語:VB.NET Windowsアプリケーション
概要:MDBのテーブルを型付きDatasetと連携したDataGridに一覧表示し、
一覧からのDELETEと単票画面で指定した内容でのINSERT、UPDATEを実現。

で、感想。
結構楽でした。生産性は上がるでしょう。
使える環境が2003しかなかったんで、2005や2008だともっと楽かも。
やっぱ「ノンコーディング」は時代の流れかなぁ・・・
私のようなunix-C出身のおじさんはどんどんつらくなっていくのかも(笑)
やす
会議室デビュー日: 2008/06/11
投稿数: 7
投稿日時: 2008-06-18 18:06
ご返信ありがとうございます。
大変参考になります。

私が読んでいるのは、プログラミング ADO.NET 2.0 でした。
なぜか間違いました。(やっているのはWinアプリです。)

私が「値がDataTableに代入できなくなってしまう。」と書いたのは、
「ユーザの入力は何でもコントロールには格納し、(確定ボタン押下など)
入力チェックのタイミングでエラーを通知する、という仕様(であった場合)
は満たせないのではないか」という考えからです。

####

画面の値の持ち方・操作の仕方について、私は今のところ

1.DataAdapterのFillSchemaで、DataTableの構造作成
2.「1.」に対して、DataRowをいろいろ操作(新規作成、変更、削除)など
3.「2.」をDataAdapterのUpdateでDBに更新(その際、SQLはCommandBuilderで生成)

という超簡単版でやってみています。これはまあ楽です。

しかし、本では、パフォーマンスの点などで、FillSchemaや、CommandBuilderは
あんまりよろしくない、とかいています。
(DBサーバへのアクセスが発生するので)

そこでは、「毎回FillSchema」の代替案として「型付きDatasetを作成」も
出ていました。
・方法1 VisualStudioから
・方法2 XMLの作成(WriteXmlSchema)→ロード

個人的には、FillSchemaや、CommandBuilderで取得・作成したデータを(XMLなど)
ファイル出力し、プログラムではそれを初回のみロードする、というのが良い気が
しています。
(デザイナでの操作は、どうも無駄な抵抗感があります。
どこにどんなソースを生成するかを把握するのが大変なので。)


[ メッセージ編集済み 編集者: やす 編集日時 2008-06-18 18:13 ]
テッテ
ベテラン
会議室デビュー日: 2008/03/16
投稿数: 91
投稿日時: 2008-06-18 20:06
引用:

私が「値がDataTableに代入できなくなってしまう。」と書いたのは、
「ユーザの入力は何でもコントロールには格納し、(確定ボタン押下など)
入力チェックのタイミングでエラーを通知する、という仕様(であった場合)
は満たせないのではないか」という考えからです。


確かにそれが必須要件なら、型付きデータセットのバインドでは難しいですね。
私が担当したシステムでは、こういう必須要件はなかったので、
型付きデータセット+CellValidating で実装しました。
データセットに格納できないような単純な入力エラーは入力時にチェックして、
それ以外のエラー(ビジネスロジックでのチェック)のみ
確定ボタンの押下のようなタイミングで行うというスタイルです。

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