【質問】ASP.NETスレ Part6【雑談】
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2009/09/01(火) 20:06:04ID:???Microsoft .NET Frameworkの一連のテクノロジの一つです。
技術の移り変わりの早い分野ですので、みんなで質問、相談しつつ、より理解を深めていきましょう。
●ASP.NET関連サイト
マイクロソフトASP.NETデベロッパーセンター
http://msdn.microsoft.com/ja-jp/asp.net/default.aspx
ASP.NETオフィシャル(英語)
http://www.asp.net/
VisualStudioホームページ
http://www.microsoft.com/japan/msdn/vstudio/
SQLServerホーム
http://www.microsoft.com/japan/sqlserver/2005/default.mspx
IISオフィシャル(英語)
http://www.iis.net/
ASP.NETにAJAX技術を取り入れるASP>NET AJAX(英語)
http://www.asp.net/ajax/
ASP.NETにMVCアーキテクチャを取り入れるASP.NET MVC(英語)
http://www.asp.net/mvc/
ASP.NETでのお役立ちの定番サイト
http://www.atmarkit.co.jp/channel/aspnet/aspnet.html
●前スレ
【質問】ASP.NETスレ Part5【議論】
http://pc11.2ch.net/test/read.cgi/php/1232671611/
0015nobodyさん
2009/09/04(金) 00:57:14ID:???0016nobodyさん
2009/09/04(金) 01:05:24ID:7hywDWuEhttp://ascii.jp/elem/000/000/452/452106/index-3.html
のサンプル07のように、入力フォームにdl,dt,ddタグを使うのはありでしょうか?
tableタグを使うよりカッコイイと思いましたw
クロスブラウザでスタイルを考慮すると、cssで苦労しそうですか?
とくに修正時(修正者が作成者と違う場合)のコストが大きい?
0017nobodyさん
2009/09/04(金) 01:12:33ID:???あるけどない
ないというのは、結局地道に↓みたいに自作するしかない
http://www.atmarkit.co.jp/fdotnet/dotnettips/116formatint/formatint.html
あるというのは、泥臭く自分で作るしかないけど、そういうクラスを自分用で定義して、
静的クラスとして利用すれば、それなりにスマートに利用できるし、
拡張メソッドを使えば、静的メソッドをインスタンスメソッドのように呼び出すことができる。
0018nobodyさん
2009/09/06(日) 03:50:25ID:???ここよりWeb制作板の方が適切だと思う。
個人的には前者はアリ。後者は自前で全て用意せず、
css / javascriptフレームワークを使用するのが吉。
0019nobodyさん
2009/09/06(日) 23:11:26ID:???www.asp.netのサンプルやらMS謹製含む書籍を見てもみんなバラバラ。
BLLとDALに分けるんじゃなかったのかよと。
ある本では型付きデータセット最強と書いてて、
またある本では型付きデータセットは複雑な業務ロジックに使えないから
自前のエンティティクラスをバインドすべしと書いてあって、
いや、型付き無しのデータセットで十分みたいな論もあったり。
もう訳分からん。
で、「このやり方ならOKだ!」みたいな文句に惑わされてホイホイリンクを辿ると、
どっかの会社の独自フレームワークか、SqlDataSource一つだけのしょぼいサンプルとか。
もう疲れたよママン
0020nobodyさん
2009/09/06(日) 23:23:40ID:???まあ、それぞれ開発者によって前提が違うので言ってることがバラバラになるのは当たり前だと思うよ。
鵜呑みにするんじゃなくて、自分でそれぞれの手法のメリットとデメリットを書き出してみて、
自分の立場で一番優れていると思う手法を採用すればいいだけのこと。
それはASP.NETに限ったこっちゃないけど。
0021nobodyさん
2009/09/06(日) 23:41:50ID:???型付きDataSet→クエリ固定でVSが自動的に作成するDataSet
型無しDataSet→クエリを動的に生成して自分でDBからデータを取得
という位置づけで書いてるんじゃね?
型無し、型付きは、それぞれが問題じゃなくて、それを実装するコストが問題なんでしょ。
クエリ固定で、where文ぐらいを動的に生成すればいいぐらいなら、IDEが自動で作ってくれる
型付きDataSetでも十分。複雑なクエリで動的にクエリを発行しなけりゃならい場合は、
型付きデータセットの定義を作製するのが面倒だから、別に型付きでなくていいよって話ではないかと。
0022nobodyさん
2009/09/07(月) 04:57:31ID:???まず、前提としてるバージョンをよく確認しないとだめだぜ
あとは対照としてる規模とかにもよって変わるしな
で、最適な組み方は設計方法によっても違う
標準といわれる設計がないので、標準的な組み方もないんだよ
0023nobodyさん
2009/09/07(月) 23:10:36ID:???の中身がほとんど一緒なんだけど微妙に違う、みたいな時どうしてる? Edit
だとキー項目は見せてもいじらせないとか。
DRY 原則に従い、CompositeControl 継承したカスタムコントロールを
毎回自作しているが、これで良いのかどうかわからん。慣れてしまえば楽
だが、そもそも ASP.NET ってなるべくコード書かないようにするための
仕組みだし、メンテナが変わった時の引き継ぎがめんどいなあと悩み中。
0024nobodyさん
2009/09/07(月) 23:36:23ID:???ASP.NETをフレームワークとして捉えるならその通りなんだけど、
カスタマイズ性の乏しいFormViewとかGridViewは、
あると便利的なコントロールなんで、
フレームワークの一つとして捉えるのは本末転倒だと思う
なんて言うのかな
個々に特化したサーバコントロールは料理に例えると、めんつゆであり、ポン酢。
蕎麦やしゃぶしゃぶとか、それぞれにマッチした料理にはぴったりだけど、互いの流用はできない。
基本となるサーバコントロールは醤油。鰹だしとみりんでめんつゆだし、柑橘類があればポン酢にもなる。
自分なら基本的なサーバコントロールの醤油だけ使って作成するかな。
002523
2009/09/08(火) 00:07:14ID:???言ってる意味がわからんが、FormView はテンプレートで自由に
レイアウトをカスタマイズできるし、ObjectDataSource と組み
合わせて DB アクセスするにはもってこいじゃないの?
醤油だけで作るってのはつまり、FormView を使わないってこと?
俺にしてみりゃあり得ん話だが、なぜそうするのか理由が知りたい。
0026nobodyさん
2009/09/08(火) 00:21:04ID:???既に書いてるけど、めんつゆに合う料理ならめんつゆでいいし、ポン酢ならポン酢に合う料理に使えばいい。
そのかわり、基本はめんつゆやポン酢なので、許容範囲が狭い。
醤油なら、めんつゆもポン酢も作れるし、もちろん醤油ベースのステーキソースも作れる。
ポン酢やめんつゆで料理が簡単に作れるのはいいけど、
それに捕らわれて料理全般の多様性が減ったり、
ベースとなるめんつゆやポン酢以上の味が作れないと感じるから。
もちろんポン酢を利用してる人でも、醤油ベースで様々な料理は作れるけど、
そこにポン酢のメリットや利便性を醤油に求めるのはおかしいと思うってこと。
002723
2009/09/08(火) 00:42:27ID:???ありがとう。醤油は好きだが理解しあえないのが良くわかった。
>>23 を読み返して自分でも意味不明だったので再度書いてみる。
FormView の InsertItem と EditItem の内容がほとんど同じだけど微妙に違う
という状況はメンテナンス性が悪いし、コードも重複するので何とかしたい。
同じ内容の検証コントロールをそれぞれに貼るとか耐えられない。
そこで、モードによってレイアウトと機能を切り替えるカスタムコントロール
を自作し、FormView の InsertItem と EditItem にそれぞれ貼り付けている。
これでレイアウトと機能が再利用できる。もちろん DataBindings の設定は重複
するが、現状ではそこを追求しても仕方がないので割り切っている。
これは割と良くある状況だと思うのだが、経験談を聞かせてもらえると嬉しい。
0028nobodyさん
2009/09/08(火) 01:02:56ID:???ない
FormViewなんてつかわない
0029nobodyさん
2009/09/08(火) 07:59:50ID:???漏れのやってるプロジェクトもFormView使ってるが、もう諦めてPerlかなんかで置換スクリプト書こうと思ってる。
クラス継承して作ってもインターフェースのどのメソッドが呼ばれているか分からんし、MVCとかDynamicDataとかで使うとなると内部の手続き調べるのが大変。ソースコピペを自動化した方が良いと思う。
0030nobodyさん
2009/09/08(火) 09:02:28ID:???>>27
>FormView の InsertItem と EditItem の内容がほとんど同じだけど微妙に違うという状況
この微妙というのが、どの程度の微妙さかにもよるんだけど、
ウチは開き直って登録と修正を別のUserControl, FormViewにしてしまうことが多い。
確かに分けると重複する部分が出てくるが、
経験上、一つにまとめてしまうと度重なるメンテを受けた後、
それぞれのモードの専用処理が恐ろしいことになりやすい。
また、そもそも初期状態でも、モードごとの専用処理を抜き出すと
それだけで結構な分量になっていることがある。
じゃあ1クラスで全て完結させるのは諦めて、
完全に共通な処理を外出ししてから、
それぞれのモードを別クラスとして扱った方がよくね?という流れ。
要するに、FormView, GridViewのモード切り替えって使えねぇなという(ry
0031nobodyさん
2009/09/08(火) 14:25:57ID:???プログラミングASP.NET 3.5によると、
編集と挿入が要件の異なる別個の処理であることを理解してください
らしいので、そもそもその二つを共通化しようとする方向が間違ってるらしいぞ
だからと言って登録専用FormView、修正専用FormViewを作るのはやり過ぎな気がするが
表示用FormViewあったら、1ページにFormView合計三つ定義することになるんだよな?
0032nobodyさん
2009/09/08(火) 15:54:59ID:???登録、修正画面を作ったほうが楽ってことだな
DBへの登録、修正の画面パターンなんて数パターンしかないだろうから、
一度作ればひな形ができて、あとは使いまわすだけじゃん
なんでFormViewとかGridViewとか、使い回しの悪いものを使うのかわからん
0034nobodyさん
2009/09/08(火) 20:48:57ID:???しかもFormViewという足枷が外れる
作成する便宜に捕らわれすぎて、本来何のために開発してるのか
見失ってるんじゃないか?
0035nobodyさん
2009/09/08(火) 21:11:53ID:???FormViewはDynamicControlが使えるからじゃまいか。
本来の使い方をすれば、一々入力フォームの形式を考えずに済むぞ。
003623
2009/09/08(火) 22:04:35ID:???CompositeDataBoundControl 実装するの? すげーや。
>>29
自動化は賛成だが、動きは理解しとかないとまずいだろ。
>>30
登録と修正は単一の FormView で ChangeMode するだけだと思うが。
>>31
登録も修正もレイアウトと入力チェックは似たようなもんだろ? そこを共通
化したいんだよ。実際の更新作業はデータソースがやるからまた別の話。
>>32
ASP.NET と ADO.NET っていう道具立てで FormView を回避するほうが
わからんよ。
>>34
FormView が足枷なわけないだろ。開発者を助けてくれるのに。
>>35
DynamicData って Oracle でも使えたっけ? 一応、Oracle と SQLServer の
両方に対応せよということなので、使ってなかったが。
003723
2009/09/08(火) 23:06:13ID:???FormView を使う時には、以下のようにカスタムコントロールを使うのが
理想的ではないか、というのが現時点での俺論。カスタムコントロールには
編集に必要な全てのコントロールやバリデータが含まれているから、わざわざ
FindControl せずに済むというメリットもある。テンプレートを使いながら
タイプセーフを実現できるわけで、この利点は捨てがたい。
FormView
|
+- DataSource -> データオブジェクト(Select/Insert/Update/Delete)
|
+- InsertItemTemplate -> カスタムコントロール(mode=Insert)
|
+- EditItemTemplate -> カスタムコントロール(mode=Update)
当然ながら、Select の引数には GridView の SelectedValue をバインドして
一覧と同期させている。
しかし、このカスタムコントロールの実装は Joe Coder には敷居が高いのでは
ないか。デザイナで aspx をいじれば済むという手軽さを失うわけだから。
標準化とあわせて、このあたりの折り合いをどうつけているのか、うまい落し
どころはないか、というところが知りたいのっす。
0038nobodyさん
2009/09/08(火) 23:27:54ID:???>FormView が足枷なわけないだろ。開発者を助けてくれるのに。
足枷だろ?FormViewで実現できない仕様を渡されたら嫌な顔するだろ?w
つーか、要求定義の段階でユーザからの要望をはねつけてるだろw
ASP.NETの使用上できませんとかいって。本末転倒。
0039nobodyさん
2009/09/08(火) 23:31:48ID:???そんな面倒なとこするなら、初めからポトペタで済ませたほうがよっぽど楽だろ
InsertもUpdateもほぼ同じロジックで流用できる。
新規か編集か、つまりIDがあるかないかで、InsertするかUpdateするかを分けるだけだ。
バリデーションもすべて共有できるし、編集されたくないコントロールはReadOnlyにするだけ。
大したコスト削減にもならんのにFormViewに固執する理由がわからん。
004023
2009/09/09(水) 00:24:25ID:???ASP.NET でやりやすいように設計するだけの話。それ以上でも以下でもない。
>>39
FormView を使わなかったらデータ項目とコントロールのやり取りを全部手で
書く必要があるし、SQL も泥臭く書くことになるんじゃないの? 俺にとっては
そっちのほうが面倒なんだけどな。
0041nobodyさん
2009/09/09(水) 03:21:58ID:???(SQL)データソースの更新機能だけでDB更新が事足りる
再利用しないカスタムコントロール作るのを余計な作業と思わない
(結果として)同じ処理をするコードは極力一つにまとめないと気が済まない
まあ、こんな感じだな
俺には一つも当てはまらねぇw
いまだ1.1の修正させられる俺に言わせれば、RepeaterでOK
それ以外は使いたければ使えば、って感じ
0042nobodyさん
2009/09/09(水) 07:28:11ID:???>ASP.NET でやりやすいように設計するだけの話。それ以上でも以下でもない。
つまり顧客の要望であってもASP.NETでやりにくければ、そういう設計にはしないってことだな。
んー、自社向けなら許されるけど、納品する立場ならこんな発言許されないだろ。
プログラマ(というか設計者)として失格だと思うぞ。
>FormView を使わなかったらデータ項目とコントロールのやり取りを全部手で
>書く必要があるし、SQL も泥臭く書くことになるんじゃないの?
それのどこが問題なの?
求められる要求に対して、これらのコントロールが活用できるならすればいい。
しかし、そのコントロールを使わないと面倒で泥臭くて嫌と考えたり、
ましてASP.NETでやりやすいように設計するなんてのは本末転倒。
それに、ASP.NETが開発効率を上げるための仕組みだ。
結果、副次的にコードの記述が少なくなるところまでは理解できるが、
だからそういったコントロールを使わなきゃいけないと思うのは完全に間違いだろ。
あくまで利用できるところにのみ利用し、難しいところは基本的なコントロールで代替する。
ASP.NETは、基本的なコントロールを利用するだけでも開発効率は十分に高い。
>俺にとってはそっちのほうが面倒なんだけどな。
俺が思うプログラマが決して言ってはいけない言葉。それは「面倒」。
004435
2009/09/09(水) 07:52:48ID:???すれ違いになるが、その「面倒」はこの先納品した客も被る訳だ。面倒を顧客の要望だからと言ってただ言いなりに実装するのは、自分にも顧客にも良い結果にはならない。
まあこういうフレームワークは日本の箱庭的システムにはそぐわないかもね。
004523
2009/09/09(水) 08:04:03ID:???俺のところだと SQL 手書きが発生するのは全体の 2 割以下だな。それもこれも最新の
ASP.NET が使えるおかげ。
>>42
わかった。お互い別の道を歩もう。
0046nobodyさん
2009/09/09(水) 08:57:27ID:???0047nobodyさん
2009/09/10(木) 09:08:58ID:???インストール先のサーバーにはFrameworkが1.1と2.0が入ってて、規定のサイトのASP.NETは1.1に設定されている。
この場合配置されたサイトは1.1で動作するようになってしまうんだが、インストーラー側で2.0に切りかえれないものだろうか?
配置後に手動で切り替えれば済むことなんだけど、なんとかならないかな。
web.configのsupportedRuntime要素を設定してもダメみたいだし。
0049nobodyさん
2009/09/11(金) 03:52:35ID:???本末転倒
0050nobodyさん
2009/09/11(金) 08:22:52ID:???0053nobodyさん
2009/09/11(金) 19:07:44ID:???応用的なの作っても、結局特定の用途向けみたいな感じで、
万人向けじゃなくなっちゃうし、
かといってカスタマイズがこんだけできるんですって作ると、
今度は複雑になって逆に万人向きじゃなくなる感じがする。
今までで困ったのは帳票ぐらいかな。
こればかりは買ったぞ。数十万とかで。
あとはrepeaterさえ攻略すればなんとかなる感じ。
ところでformviewが話題になってるけど、
外部制約とかの整合性制約がある場合も対応できるの?
商品名を選択させてIDを入れるとか、
重複しない商品コードを入力させるとか。
試そう試そうと思っているうちにそのままなんだ。
0054nobodyさん
2009/09/12(土) 13:14:52ID:???登録フォームをどうやってFormViewで作るの?
何かしらバインドしないとFormViewって表示されないよね?
0055nobodyさん
2009/09/12(土) 17:18:05ID:???0056nobodyさん
2009/09/12(土) 23:04:00ID:???わからないのは、いまのところ4つ
・ParentTable→ParentID ParentCode ChildID
・ChildTable→ChildID ChildCode
があって、ParentTable.ChildIDはChildTableのChildIDと同じで、
FormViewでChildCodeを入力することによってParentTableのフィールドを更新なり挿入なりしようとしている場合。
1)
テーブルがこんな感じで、ParentTableにChildTableの主キー(ChildID)を保持してる場合、
FormViewのChildIDをChildCodeに置換してlistboxなどで表示する方法ってある?
2)
同時実行制御はデータソースでのデータバインド時にParentTableの実行制御はできると
思うんだけど、ChildTableが変更された場合にも同時実行制御の対応できる?
(入力中にChildTableが編集される可能性を排除するため)
3)
2)と近いけど、ボタンをクリックしてから、実際に保存するまで、
ParentTableとChildTableのトランザクションはどうやって管理すればいい?
(同時実行制御で確認してから、実際に書き換えするまでのトランザクション管理)
4)
ChildTableの行数が増えると、ChildCodeを何かしらの手がかりに検索して
入力(表示)させる必要があると思うんだけど、FormView内にコントロールがあって、
それを選択可能?
うーむネットでも情報が少ないし疲れたよママン
0057nobodyさん
2009/09/12(土) 23:54:01ID:???それだと親と子は1:1にしかならないような
1)
置換するの意味がわからん
普通に結合するなりなんなりでChildCodeの項目も用意するだけでは?
2)
実行制御って具体的に何のこと?
DBへの排他制御なら、基本的に楽観的ロックなのでDBへのロックはなしだろ
4)
子テーブルの行数増えても親テーブルにもってるIDで見るだけじゃないのか?
お前の考えてる入力イメージがまったくわからんぞ
0058nobodyさん
2009/09/13(日) 00:13:12ID:???例えばparent=受注テーブル、child=商品テーブルみたいな感じ
parent:Childは1:n
1)
>置換するの意味がわからん
childテーブルの商品idを、商品コードに置換をするってこと。
表示時はそれでいいけど、
更新時には商品コードを商品id(childID)に置換をする必要があるでしょ?
2)
>実行制御って具体的に何のこと?
商品コードをlistBoxで選択をさせる場合、人間が商品コードを選択し、
それと対になる商品id(childID)をpostBackで受けることになると思うのけど、
その間にマスタが変更されてしまった場合、
childIDとcodeが一致しない可能性が発生しない?
3)
>DBへの排他制御なら、基本的に楽観的ロックなのでDBへのロックはなしだろ
楽観的ロックでchildTableのdateTime値から変更が無いことを確認しても
それを確認してから、実際に、parentTableを更新する間に編集されちゃうかもしれんから、
トランザクションで管理をしたくならないかなと思って。
4)
>子テーブルの行数増えても親テーブルにもってるIDで見るだけじゃないのか?
商品コードを、listBoxに入れて選択をさせることはできるかもしんないけど、
商品をたくさんの条件から検索して、それをformView上のlistBoxなり、
textBoxなりに商品コードとして入力したいこととかない?と思って。
そんでその方法がよくわからんと。
0059nobodyさん
2009/09/13(日) 00:45:56ID:???006059
2009/09/13(日) 02:44:02ID:???0061nobodyさん
2009/09/13(日) 02:59:49ID:???具体的に書けばいいのかなw
1)
textBoxに商品コードを入力させ、
その商品コードから商品テーブルの商品idを取得して、
商品idを受注テーブルに挿入することはformViewでできる?
2)
1)と似たような感じで、
商品コードをlistBoxから一覧で入力させるとき、
受注テーブルは楽観的ロックでいいけど、
商品テーブルは商品コードを入力中に、
裏で誰かが商品マスタを編集して商品コードを変更させてしまっても
楽観的ロックで排除してくれる?
3)
2)で楽観的ロックで確かめられないとしたら、
商品テーブルから商品コードと商品idが一致するのか確かめなくちゃだけど、
商品テーブルの商品コードの存在を確かめる→受注テーブルに挿入するの間に
商品コードが編集される可能性があるから、トランザクションで管理できる?
4)
textBoxに商品コードを入力させるとき
他のウィンドウや他のformから商品コードを検索して
formView上のtextBoxに入力させることはできる?
こんな感じなんだぜ。うぇーはっはっは
0062nobodyさん
2009/09/13(日) 05:09:22ID:???とりあえずFormViewの仕事とDataSourceの仕事を区別しよう
FormViewで出来るかと言われれば、全部出来る
コードレスで出来るかというなら、FormView周りにかぎれば、
条件つきでたぶん出来る(4以外)
お前が望むような動作をするDataSourceがあれば、って条件だがな
006359
2009/09/13(日) 08:56:53ID:???できる。FormView関係ない。
2), 3)
個人的にコードレスではできないと認識している。
(2.0しか知らないから、今はどうなのか知らん)
4)
できる。FormView関係ない。
寝る。途中で飽きた。
ttp://www1.axfc.net/uploader/Sc/so/36159.zip
0064nobodyさん
2009/09/13(日) 17:58:37ID:???FormView(+ObjectDataSource)は使うけど、
結局、相当に長くコードを書くのが必要なんだな。
コードみて大まかなやり方がわかったよ。ありがとう。
クエリを書くのが2割になったというので興味があったんだけど、
テーブルってほとんど他とリレーションしてるから、
結局は更新時にチェックをしなくちゃいけないよね。
そうすると何かしらのクエリの記述が必要になりそうだね。
既存のプロジェクトを調べたら、子テーブルのIDを持ってないテーブルって、
都道府県マスタとか、商品種別のマスタとか、一部のマスタぐらいしかなかった。
だから2割になるというより、最大で2割ぐらい減るのかなという印象。
これなら、無理してformView使うよりも
コントロールのポトペタのほうが、制限が少なくていいかなぁと思ったんだけど、
どうなんだろう。もちろん自分の場合の話だが。
ところで、文章から、2)と3)なんかを
FormViewで実装した経験がないように見受けられるけど、
そんなチェックはしないことが多いのかな?
整合性で問題がでるパターンが想像できると思うのだけど。
それとも、子テーブルのIDを持つようなテーブルを
更新したり、挿入したりすることがあまりないような
シンプルなサイトの開発が多いのかな?
ちょっと気になったもので。
0065nobodyさん
2009/09/13(日) 18:44:22ID:???それで親と子が1:nになるんだよな?
通常の業務で入力するような範囲で、マスタの変更チェックなんてしないとおもうが
おまえのとこはそんなに頻繁にマスタが変更されるのか?
0066nobodyさん
2009/09/13(日) 21:14:34ID:???第一に、前者と後者は関連性はないよね。
n:nでも、n:1でもチェックが必要なのは同じことだから。確認のため。
1:nの関係はよくあると思うよ
商品->商品種別、会社->都道府県、支社->社員、会社->担当、受注->明細とか
親->子の例は、
そんな確認ができるのかなという疑問に思っただけなのと、
他のテーブルの主キーを持っていないテーブルが、
マスタ関連だけだったというだけなんで、
常にマスタのチェックをしなきゃいけないということを、
言いたかったわけじゃないんだ。ごめんよ。
でも、自由入力させる場合の商品コードは、
その存在チェックと主キーへの変換は必要だよね?
入荷した商品の、在庫の引き当て数量チェックとかも。
似た動作をいろいろ見ると、いろんな確認が必要で、
他のテーブルの確認をせずに、
無条件で更新できるような入力箇所って
思うより少ないのねって思ったの。んでもって、やっぱり手書きなんだなと。
掲示板とか、ゲストブック的な、
他のテーブルを意識しなくても済む単純な入力や編集には
便利だと思うんだけど
006759
2009/09/13(日) 21:35:45ID:???>そんなチェックはしないことが多いのかな?
登録対象商品がまだ有効かどうかのチェックはする。よくする。
ただし、普通、マスタの更新(UPDATE)なんてしない。ありえない。
やるなら削除後に新規登録、または新規登録のみ。
そうすれば登録対象が急に別物にすりかわるなんてことはなくなる。
1:nの関係はもちろんよくあるが、親が子のIDを持つことはありえないと思うんだが。
支社テーブルは社員IDを全部持ってるの?各社員(子)が支社コードもってればよくない?
006865
2009/09/13(日) 22:27:45ID:???1:nの関係はよくあるが、親が子のIDもった状態でどうやって
親:子が1:nの関係を作れるんだ?
その親に対する子はその親がもってるIDの子1件だけだろ
まさか同一IDの子が複数いるとか言わないだろうな
後半に関しては、個人的意見だがIDとコードを両方持つ設計は少ないと思うぞ
データとしては入力されるコードを格納すればいいんだし
コードとID別持ちで、コードからID引いて格納するって設計がまあ特殊なんだと
在庫引当の例とかは、ビジネスロジックとしてのチェックの問題だ
ビジネスロジックをコードレスなんてもともと無理だと思うがな
それは更新の問題じゃなくて入力内容チェックの問題
FormViewだろうがなんだろうが画面を表示する機能に直接関係ない
0069nobodyさん
2009/09/14(月) 05:04:37ID:???>登録対象商品がまだ有効かどうかのチェックはする。よくする。
するよね?
するってーと、ObjectDataSourceなんかでチェックして、
だめなら、だめの返値返して、エラー表示する処理とかになるよね。
>1:nの関係はもちろんよくあるが、親が子のIDを持つことはありえないと思うんだが。
>支社テーブルは社員IDを全部持ってるの?各社員(子)が支社コードもってればよくない?
ごめん。急いで書いたので、一部、不適切な関係があるね。
というか、自分が、どうやら、親と子を逆に捉えてるのかな。
他のテーブルの主キーを持ってる方を親だと、ずっと思ってたよww
商品マスタ->商品区分マスタ、取引先->都道府県マスタ、社員マスタ->支社マスタとか。
0070nobodyさん
2009/09/14(月) 05:11:29ID:???>親:子が1:nの関係を作れるんだ?
上でも書いたけど、どうやら俺が逆に書いてるようだw許してくれ(´;ω;`)ウッ…
でも、在庫引き当て時とかのチェックは1:1でも1:nで・・も(ry
>後半に関しては、個人的意見だがIDとコードを両方持つ設計は少ないと思うぞ
どっちにしろ、コードの存在確認はしなきゃなんないでしょ?
編集されたかの楽観的ロックじゃなく、
存在しないコードを入力させない存在チェックとして。
>FormViewだろうがなんだろうが画面を表示する機能に直接関係ない
というかね
>45 名前: 23 [sage] 投稿日: 2009/09/09(水) 08:04:03 ID:???
>俺のところだと SQL 手書きが発生するのは全体の 2 割以下だな。それもこれも最新の
>ASP.NET が使えるおかげ。
から、formView+dataSourceでクエリの手書きが2割以下になると思ったのよ。
そのぐらいすごいんだと。
ほんとは、調べるとそうでもなくて、
過去の経験からは、ほとんどチェックが必要だったりして、
ObjectDataSourceでコード書かないといけないので、
自作のクラスで処理するのと、あんま差はないなと思ったということ。
で、dataSourceを利用しないで、formViewを使うメリットってなに?
という話になるとおもうんだけど、
上のサンプルみると、各コントロールのインスタンスからデータを取得してるから、
ポトペタするのと変わらないようにみえる。
フィールド値のバインドを自動的にやってくれるぐらい?
という感じがしてるんだけど、という感じ。
うーん、なんかいまいちよくわかんないな・・
007165
2009/09/14(月) 10:05:53ID:???DB更新の機能(=DataSource)の範疇でもない(入力チェックをObjectDataSourceでやるのは
俺は間違ってると思う。DataSouceのもとになってるクラスでチェックするべきだと)
で、SQLの手書きが2割以下ってのは、俺は言いすぎだとは思う
ただ、純粋にSQLを書くという作業に限ってみれば、SQL書くところすべてに
SQLDataSourceつかえば、確かに自分でSQL書くことは少ないとはおもうが
それはアクセスでクエリビルダ使ったらSQL手書きしなくていいです、ってレベルと同じ話
必要なSQL文の数が減るわけじゃなくて、それを書く作業が減るだけ
DataSource使わないFormViewのメリットなんてないと思う。というか
FromViewはDataSource前提に設計されたコントロールだと思うが
DataSourceつかうことにメリットがあるんじゃなくて、使わないことにデメリットがある
0072nobodyさん
2009/09/14(月) 19:50:49ID:???DataSourceの元になるクラスという?
こういった場合にはObjectDataSourceでSELECT、INSERTなどのクエリを生成して、
コントロールにバインドするんじゃないの?
0073nobodyさん
2009/09/14(月) 19:52:33ID:???↓
DataSourceの元になるクラスというと?
007423
2009/09/14(月) 21:41:06ID:???入力チェックは aspx.cs の仕事だと思うがなぁ。SQL 手書き 2 割以下というのは
ObjectDataSource で TableAdapter を使うパターンが 8 割を占める、という意味。
たとえ複数テーブルの更新が発生したとしても、内部的には TableAdapter を使い
回す。手書きが必要なのはバッチ処理ぐらい。まあ、プロジェクトにもよるがうちは
テーブル数と画面数が大体 200 ぐらいだな。コードマスタが 50 以上あったはず。
0075nobodyさん
2009/09/14(月) 23:51:43ID:???うちは今一切使わない方針だけど。
なんかたまにASP.NET本来の原初的な組み方をしなきゃならないって考える波がくる。
で、MS本読み直すと「あー間違ってたのかな」と思ったり。
「Javaから来たヤツは全てを自前クラスで用意しようとする。
そうする利点は認めるがASP.NETでは…」みたいな論調だし。
で、軽く組み直してみたら、やっぱりハマるんだけどw
0076nobodyさん
2009/09/15(火) 00:04:23ID:???それならDataSourceと切り離してFormViewだけのメリットって何?
って話だな?
これとは別にTableAdapterを使うのはいいけど、データのソートとか抽出とかはどうしてる?
クエリかかないならTableAdapter.Fill(DataTable)して、DataTable.Select("")してるってこと?
これだとSQLからデータ抽出して、メモリに蓄えて、そこからまたSelectして
無駄が多いような気がするんだが。
0077nobodyさん
2009/09/15(火) 02:15:05ID:???SQL書く作業がTableAdapter定義する作業になっただけ
昔のADO.NETでは、DataAdapterでのUPDATEは使えねえってのが定説だった気がするが
TableAdapterになって使いものになるようになったのかな?
0078nobodyさん
2009/09/15(火) 03:43:03ID:???複雑なことしようとすると、TableAdapter用のクエリの手書き必須
挿入時に論理削除を意味するIsDeleteをいじられたくないのでfalseで固定したいとか
サブクエリで抽出した内容を取得して挿入したいとか。
挿入したときの主キーを取得するのも手書きが必要だったような。
あと上にもあるけど動的にクエリを発行できないので
検索条件に従ってWhere句を作成するとかは無理だったはず。
かといってDataTableのSelectメソッドをWhere句の動的生成の
変わりに利用すると、いちど全部のデータを取得するので、
行数が多いとデータの取得に時間がかかる。
そのたありがLinqToSQLやEntityFrameworkで解決してると思うんだけど、
LinqToSQLは終了の方向だし、EFもなんとかしてくれって言う人が多くて、
まだ微妙なところ。
007923
2009/09/15(火) 07:39:06ID:???うちでは Excel の仕様書から TableAdapter を自動生成していて、SelectList メソッド
にソート引数も指定できるようにしてるよ。内部的には ORDER BY に変換する。
>>77
やっかいなのは、SELECT するのは VIEW だけど更新もしたいケース。そんな時は
Update メソッドの中で、個々の TableAdapter を使い回す。それで対応できなければ
SQL 手書き。
>>78
WHERE の動的作成は頻出パターンなので、TableAdapter の自動生成時に作り込んで
いる。つまり、検索条件を引数にもらう SelectList メソッドの中で、引数が null じゃ
なければ WHERE に追加している。こうすると、画面側では検索条件をバインドする
だけで済む。
0080nobodyさん
2009/09/15(火) 17:37:59ID:???>TableAdapter を自動生成していて
>WHERE の動的作成は頻出パターンなので、TableAdapter の自動生成時に作り込んで
それでSQL手書きが2割以下になるのか。それなら納得
しかし、自動生成されたSQLを使うのはどうもあまり乗り気になれん
TableAdapterにしてもDataSourceにしても、SQLは完全にラップされて
アプリ側から見えなくしてるわけだし、その方向が正しいのはわかるんだけど
アプリ側でSQLもシームレスに使いたいっていうと、LINQな方向に行くのかねぇ
でもあれもSQLがそのまま通るわけじゃないしなぁ
0081nobodyさん
2009/09/15(火) 19:25:00ID:???>TableAdapter の自動生成時に作り込んでいる。
>つまり、検索条件を引数にもらう SelectList メソッドの中で、
>引数が null じゃなければ WHERE に追加している。
これどうやるの?
TableAdapterで、条件に従ってWHEREを追加とかできたっけ?
0082nobodyさん
2009/09/15(火) 23:02:34ID:???0083nobodyさん
2009/09/15(火) 23:29:57ID:???とかじゃないだろうなw
008423
2009/09/15(火) 23:52:09ID:???Excel マクロでコード生成するんだからパターンさえ決まれば何でもできる。
Fill 系のメソッドで引数チェックして WHERE を組み立てるなんざどこでも
やってることでしょ。
0085nobodyさん
2009/09/16(水) 01:27:00ID:???そのFillなんちゃらの引数によって、クエリを作ったりできたっけ?
自分はできないと思っていたので、できるのなら教えてほしい。
環境はVS2005+SQLServer2005
0086nobodyさん
2009/09/16(水) 01:32:33ID:???環境はVS2005+SQLServer2005で、TableAdapterのFillなんちゃらのメソッドで、
引数に従ってWHEREを作成するなんて無理だと思ってた。
Fillなんちゃらがストアドを呼び出してて、
ストアド側で引数によってクエリのWHEREを組み立ててるならわかるけど、
それはクエリを書いてるから手書きクエリの削減じゃないしなぁ。
0087nobodyさん
2009/09/16(水) 06:02:19ID:???>Fill 系のメソッドで引数チェックして WHERE を組み立てるなんざどこでも
>やってることでしょ。
Fillなんちゃらって、TabelAdapterのか?
SQL指定したらメソッドの中身はウィザードで勝手に作られてるぞ
すくなくとも自分でコードは書いてないから、動的にSQL作ったりはしてない
これをいじるぐらいなら俺ならTableAdapterなんて使わん
>>86
実現させる方法をいろいろ考えたが
部分クラスか継承させたクラスでFillなんちゃらを全部自前で実装すればできそう
SelectList メソッド ってのもよくわからんし、自動生成されてるのは
TableAdapterだけじゃないのかもしれんが、そのへんは>84じゃないのでわからんw
たとえストアドで操作してても、そのストアドが自動生成されているなら
「手書き」クエリは減ってるとは言える
まあ、なんかしらの開発用フレームワークあるんじゃないかって感じだな
008823
2009/09/16(水) 07:26:21ID:???TableAdapter は Excel の仕様書からマクロで自動生成してるんだって。Fill とか
SelectList とか名前はどうでも良くて、要するに ObjectDataSource の Select
メソッドに選択できるメソッドの中で、引数をチェックして WHERE を組み立てる
ロジック込みで、コードを自動生成している。TableAdapter をウィザードで作って
いるわけではない。これを「手書き」と思うなら、まあどうぞ御自由に。
0089155
2009/09/16(水) 16:20:34ID:???すまん、どの引数なのか、ウィザードとは何のことかさっぱりわからん。
よければ質問に答えてくれないか?
>ObjectDataSource の Selectメソッドに選択できるメソッドの中で、
>引数をチェックして WHERE を組み立てるロジック込みで、コードを自動生成している。
Q1 どの引数をチェックしてWHERE文を作成してるの?
1.ObjectDataSourceのSelectメソッドの引数
2.TableAdapterのFillなんちゃらメソッドの引数
3.その他のメソッドの引数(どのメソッド?)
Q2 WHERE文を組み立ててるのはどこ?
1.ObjectDataSourceのSelectメソッド
2.TableAdapterのFillなんちゃらメソッド
3.Excelのマクロ
4.その他(どこ?)
Q3 自動生成するクエリの範囲は?
1.すべてをExcelのマクロで作成
2.WHERE文以外をExcelのマクロで作成、WHERE文のみQ2のメソッドで、Q1の引数から作成
3.すべてをQ2のメソッドで、Q1の引数から作成
4.その他(どこ?)
0090nobodyさん
2009/09/16(水) 16:21:32ID:???続き
>TableAdapter をウィザードで作っているわけではない。
Q4 TableAdapterそのものはどうやって作ってるの?
1.データセットデザイナ
2.その他(なに?)
Q5 作成したWHERE文から前のクエリとWHERE文はどこに登録してるの?
1.すべてのクエリをTableAdapterに登録
2.WHERE文から前をTableAdapterに登録、WHERE文はDataTable.Selectメソッドで登録
3.その他(どこ?)
Q6 クエリをどこに登録してるの?
1.拡張子.xsdのxmlファイルのに手書きで作成したクエリを追加
2.データセットデザイナのクエリ構成ウィザードを使って作成したクエリを登録
3.データセットデザイナのクエリ構成ウィザードからクエリビルダを使って作成したクエリを登録
4.その他(なに?)
0091nobodyさん
2009/09/16(水) 16:35:02ID:???その自動生成されてるものはTableAdapterといえるのだろうか
そもそもTableAdapterって何だって話になるんだが、MSDNによると
>TableAdapter は、DataAdapter の機能を向上させるためにデザイナで生成されるコンポーネントです
らしい。
当然TableAdapterと100%互換のあるクラスも作成可能なんだろうが
それを生成したからといってTableAdapterを自動生成っていうと誤解を招くとおもうな
ObjectDataSourceでの使用が前提なら、あえてTableAdapterと互換のあるものにする必要もないし
SQL手書き量が減ってる最大の要因はこのデータアクセス層クラスの自動生成のおかげで
けっして最新のASP.NETのおかげではないってのも誤解を招いた原因の一つだな
0092nobodyさん
2009/09/16(水) 18:30:04ID:???じゃないと話がつながらないし、
もしExcelのマクロとやらでクエリを書いてるから自動だってのなら、
これはツール(Excel)のおかげでASP.NETのおかげじゃないから
2割以下なんて結論に至るはずがない。
>45 名前: 23 [sage] 投稿日: 2009/09/09(水) 08:04:03 ID:???
>俺のところだと SQL 手書きが発生するのは全体の 2 割以下だな。それもこれも最新の
>ASP.NET が使えるおかげ。
DataSetデザイナでは、WHERE文を動的に発行することは不可能だから、
みんなどうやってるのかを聞きたいんだと思うのだが。
※DataSetで動的にWHERE文を作るのは不可能というと誤解を招くと思うが、
考えられる場合の数だけ引数の異なるFill〜メソッドを作れば可能だが、
これは半固定なのでこれは動的発行じゃないし、
ストアドプロシージャでも可能だけど、これも事実上、クエリは手書きとかわらんし、
DataTableのSelect使えばソートやフィルタリングはできるが、これもクエリの動的発行じゃない
009323
2009/09/16(水) 21:41:11ID:???Q1=2, Q2=2, Q3=1
>>90
Q4=Excel マクロ, Q5=TableAdapter の定数, Q6=Q5 と同じ
要するに、TableAdapter.cs 全体を Excel マクロで吐き出している。全部。WHERE
の動的生成もその中にある。種も仕掛けもあるよ。
>>91, 92
あーなるほど、>>45 の発言が混乱させてたのか。たしかに ASP.NET のおかげじゃ
ないね。手書き 2 割以下は ASP.NET のおかげではなく、Excel マクロのおかげ。
元レスは ASP.NET 1.1 の環境だったから、単純に FormView が 使える3.5(2.0 も)は
いいぜ、という程度のノリだった。すまんかった。
0094nobodyさん
2009/09/16(水) 22:11:35ID:???ヽ(・ω・)/ ズコー
\(.\ ノ
、ハ,,、  ̄
 ̄
でDataSourceと関係なく、FormViewのメリットってなに?
本来、ポトペタするコントロールに、フィールド名を登録するだけでバインドしてくれるところ?
0095nobodyさん
2009/09/16(水) 22:50:54ID:???FormView(DetailsViewも)のメリットは、データソースの単一レコードにバインドでき
レコードのナビゲーションを操作する機能まで取り込まれているところがメリットかと
1.1で単一レコード表示させたら、レコード移動と画面の更新を全部自分でやらんとダメだからな
双方向バインドで自動更新なんておまけみたいなもんですよw
009623
2009/09/16(水) 23:02:19ID:???それもあるが、レイアウトを自由にカスママイズできるってのと、あとは登録処理が
FormView.InsertItem(false) で OK なところとか、Update の時に元々の入力値も
引数で一緒にもらえるところとかね。使ったことないなら使ってみたら?
>>95
ナビゲーションは逆に使ってないな。GridView との連動パターンしかない。
それと、双方向バインドで自動更新は不可欠だろ! これのおかげでどんだけ楽に
なってるか。
0097nobodyさん
2009/09/16(水) 23:33:22ID:???>レイアウトを自由にカスママイズできるってのと
レイアウトの自由度はポトペタ>>>>>>>>>>>>>>>>>>>>>>>>(越えられない壁)>FormViewだろ?
なんでレイアウトの自由度がポトペタに対してFormViewのほうがメリットあるんだ?
>あとは登録処理がFormView.InsertItem(false) で OK なところとか、
そんなのFormViewじゃなくても作り方次第
>Update の時に元々の入力値も引数で一緒にもらえるところとかね。
そんなのFormViewじゃなくても作り方次第
>それと、双方向バインドで自動更新は不可欠だろ! これのおかげでどんだけ楽になってるか。
多くの人はなってないんだよ。
おまえだけがエクセルでやってるから楽なの。
FormViewの利点を述べたいがために強弁してないか?
ASP.NETでクエリを書くのが2割になったとか、
レイアウトを自由にカスタマイズできるとか、
作り方次第でどうとでもなることをFormViewのメリットだと述べたりとか、
自分がやっている方法に固執してFormViewは便利だと述べたりとか。
009995
2009/09/17(木) 01:07:19ID:???>レイアウトを自由にカスママイズできる
レイアウトのカスタマイズなんてFormView以外でもカスタマイズできる
これはFormViewのメリットでも何でもない
>ナビゲーションは逆に使ってないな。GridView との連動パターンしかない。
ナビゲーションの真意が伝わってない気がするな。FormViewでレコードを移動するって話じゃないぞ
レコードが移動されたときに新しいレコードにバインドし直すって話だ
いちど、FormViewつかわないで一覧からカレント行取得して詳細表示するコード書いてみ
このコードを自動でやってくれるのはかなり楽
データ更新は、SQL書くのなんてパターン決まってるから難しくはない
(それこそ自動生成で8割まかなえるほどに)
ただ、ビジネスロジックのチェックはそうはいかんし
単純な更新でないと使えないってのが感想だ
>>97
作り方でどうにでもなるのはその通りなんだが、問題はその作りこみが
FormViewで不要や楽に実現できるようになるかどうかだろ
レイアウトの件はまあ同意だが、FormViewにもポトペタすればある程度自由にできるぞ
登録処理は、単純な更新に限れば楽なる
UPDATEの元値は、DataSet使わないならかなり有効な機能だと思う
1.1には単一レコードを想定したバインドコントロールはないんで、
その点でFromViewにはメリットはあるから、使えるとこなら使えばいいかと
逆にデメリットは、自由度が下がるってことか
それでもある程度コードかけばカバーできる範囲だと思う
0100nobodyさん
2009/09/17(木) 05:26:24ID:???上のほうにナイスなたとえがあるけど、まさにその通りだと思ったな
FormViewは麺つゆ
ウドンやソバを作るのには便利だし美味しい
だけどいくら加工してもベースが麺つゆだから味が似てしまう(応用度が低い)し
麺つゆだから酢醤油や砂糖醤油にはならない。
ポトペタの醤油は手間はかかるがより多くの料理に利用できる。
こんなとこだろ
0101nobodyさん
2009/09/17(木) 10:42:52ID:???ありますでしょうか?repeaterの中にあってIDが固定じゃないのでべた書きすることが
出来ません。
サーバ側でならRepeater.ItemDataBound イベントで処理する。
クライアント側でならJavaScriptで走査して処理する。
0103nobodyさん
2009/09/17(木) 15:36:36ID:???俺ならサーバー側もforeachで回す。
0104nobodyさん
2009/09/17(木) 16:26:00ID:???Repeaterの中をIDでFindControl
0106nobodyさん
2009/09/17(木) 23:30:47ID:???ハードコーディングしたくない俺は大体再帰で回す。
protected void button_Click(object sender, EventArgs e) {
clear(this.Repeater1.Controls);
}
protected void clear(ControlCollection controlCollection) {
foreach (Control control in controlCollection) {
if (control.GetType().Equals(typeof(CheckBox))) {
((CheckBox)control).Checked = false;
}
if (control.HasControls()) {
clear(control.Controls);
}
}
}
0107nobodyさん
2009/09/18(金) 05:33:22ID:???まあ俺なら、ページ出力時にクライアントサイドのスクリプトを動的に生成して出力しとく
チェックボックスオフにするためだけにポストバックさせたくない
今ならAjaxでやるのもありなのかもしれん。updatepanelだっけ?
その場合、Repeaterの中全部更新されるよね?
JQueryとか使うと楽ちんだわな
0110nobodyさん
2009/09/18(金) 15:09:35ID:???その場合はその項目もリセットされるわな
それがまずいかどうかは>101の判断だろう
まあ、一番楽な方法としてリセットボタン考慮する価値はあるかと
0111nobodyさん
2009/09/18(金) 15:15:51ID:???そういえばそんなのもあったな。すっかり忘れてたわ。
0112nobodyさん
2009/09/18(金) 19:03:46ID:???0113nobodyさん
2009/09/19(土) 03:13:45ID:ZjH1gzNN自分で実装してて思うんだが、こんなの俺以外に絶対に保守出来ない。
つーか俺自身でも3か月後には多分保守出来ないw
難しいシステムを無理やりWebで作るのはほんとアホとしか思えないぜ。
0114nobodyさん
2009/09/19(土) 04:39:22ID:???5行で書ける処理でもサーバー側でできるなら、そっちでやってもらってる。
>難しいシステムを無理やりWebで作るのはほんとアホとしか思えないぜ。
特に帳票とか帳票とか帳票とかな。まずデザインで死ねる。
更に、あたかも関数だらけのExcelのような動作を求められたりして死ねる。
入力項目50個超で1つ入力すると各項目を色々再計算/再描画とか言ってくるけど、
50個AutoPostback = trueな状態にするとブーブー言ってくるのは確定的に明らか。
こうなるとJavaScriptの出番になってしまい>>113みたいになって死ねる。
で、仕様変更があった時にJavaScript側で更に色々判定する必要がでてきてまた死ねる。
この経験からうちではクライアントスクリプト禁止令と、
「出来る出来ないで言えば出来ますが…は、ハッキリNoと言う」という
超基本的なことを徹底するようになった(´;ω;`)
■ このスレッドは過去ログ倉庫に格納されています