HOME > ASP.NET &C# > (25)『ASP.NET』&『C#』でGridViewコントロール使うョ RSS   Admin NewEntry Comment
情報処理、インターネット系の技術に関するお役立ちページを目指します。が、最近はゲームやアニメの話ばっかりかもし~

この記事は、『基礎からのASP.NET』
目時秀典・鈴木和久 著/ソフトバンククリエイティブ
を教科書にして、C#で勉強していこうというものです。(全32+2チャプター)

当ブログのASP.NET &C#カテゴリにある、
(*)ASP.NET &C# カテゴリ記事の注意点
を必ず一度はお読みになってくださいね。

今回はチャプター20に相当します。

(23)で作ったデータベースを新しいWebページに追加してある前提で進めます。

とりあえず、GridViewコントロールだけページに配置したら、
今度はSqlDataSourceGridViewのタスクメニューから作ってみましょう
(デザイン画面のグリッドビューコントロールを選択した状態で
  コントロールの右上にある[>]ボタンを押します)

データソースとして「データベース」を選択すること以外は
以前やったSqlDataSourceコントロールのタスクメニューと
同じ手順です。
Selectステートメントの構成ダイアログで、
WHERE句を設定する代わりに、その下にある詳細設定ボタンを押すと
図のようなオプションが設定できます。

c6051c65.gif

98ac22c7.gif









さらに設定完了後、GridViewのタスクメニューに追加されている
「編集を有効にする」、「削除を有効にする」をチェックすると
グリッドビューの一番左にリンクが生成されます。
このフィールドは「CommandField」というらしく、
タスクメニューの「列の編集」で表示されるウィンドウから
プロパティの操作ができます。
「ButtonType」プロパティをButtonにすると、リンクでなくボタン表示にもできます。


先に進む前にとりあえず「編集」と「削除」のテストをしようと思ったところ・・・

'/Chapter20' アプリケーションでサーバー エラーが発生しました。

使用されている SQL Server のバージョンでは、データ型 'date' がサポートされていません。

説明: 現在の Web 要求を実行中に、ハンドルされていない例外が発生しました。エラーに関する詳細および例外の発生場所については、スタック トレースを参照してください。

などというエラーが発生してしまいました。


???本の通りにやってるだけなんですが、環境が違うせいなのかなんなのか?
とりあえず、プロジェクト内のドキュメントからdateというキーワードを検索して、
それらしきところを探してみました。
Edit.aspxでそれっぽい箇所を発見・・・。

<asp:SqlDataSource ~></asp:SqlDataSource>
タグの中で、

<UpdateParameters>
    <asp:Parameter Name="Item" Type="String" />
    <asp:Parameter Name="Priority" Type="String" />
    <asp:Parameter Name="StatusID" Type="Int32" />
    <asp:Parameter Name="TypeID" Type="Int32" />
    <asp:Parameter DbType="Date" Name="StartDate" />
    <asp:Parameter DbType="Date" Name="EndDate" />
    <asp:Parameter Name="Description" Type="String" />
    <asp:Parameter Name="ID" Type="Int32" />
</UpdateParameters>

とあります。
ここで、DbType="Date"とあるのが、どうやらお気に召さないらしい。
VWD2008は、テーブル項目の属性を知っているはずで、
まぁ知ってるから「Date」としたはずなのに、なぜ怒られる・・・
(ついでに言えばバージョンだって知らないはずないんじゃ?)

バグ??

自動生成されたところをあれこれいじってしまうと、わけが分からなくなることが
多いので、検証用に別の新しいWebサイトを作り、さらに
もっとシンプルなテーブルを作って試したところあっさり再現しました・・・。

VWD2008のバージョン-------------
Microsoft Visual Studio 2008
Version 9.0.30729.1 SP

Microsoft .NET Framework
Version 3.5 SP1
----------------------

SQL Server2005で取得できるバージョン情報-------------
Microsoft SQL Server Management Studio Express  9.00.2047.00
Microsoft Data Access Components (MDAC)    2000.085.1132.00 (xpsp.080413-0852)
Microsoft MSXML          2.6 3.0 4.0 5.0 6.0
Microsoft Internet Explorer       8.0.6001.18702
Microsoft .NET Framework       2.0.50727.3082
オペレーティング システム       5.1.2600
----------------------

列のデータ型を「smalldatetime」で設定したのがまずかったのかと思い、
datetime」にしても結果は同じ。
他の項目にしても、テーブルを作る時には「String」や「Int32」などは
使っていないため、ASP.NET流に型指定しなきゃいけないらしいのだが・・・。

ん、よくみると.NET Frameworkのバージョンが3.5と2.0って差がありますね。
関係あるのかなぁ・・・?

ググってもなかなか有効そうな情報がみつからなかったけど、
DbType="DateTime" と記述されたコードを発見。
DbType="Date"じゃなくて"DateTime"を試してみたところ、うまくいきました^^v。

なんだかなぁ・・・。

"DateTime"を指定してあると、
datetime」でも「smalldatetime」でも更新が可能でした。

とゆわけで、<UpdateParameters>タグだけじゃなく、
<InsertParameters>の中の記述も修正・・・。

整理すると、
Microsoft Visual Web Developer 2008 Express Editionで、
GridViewコントロールのタスクメニューで自動生成された、
<UpdateParameters>、<InsertParameters>タグ内の
<Parameter>タグの、DbType属性には問題がある(ことがある?)ようです。

まぁ無料版なのであまりつっこまないでおきますか・・・時間とられたorz

さて、今回はやりたいことがもう一つあります。
StatusID、TypeID は、レコードを更新する場合に素の数字よりは
ドロップダウンリストから選択とかしたいですよね?

本にはばっちりやり方が載っていました。

GridViewのタスクメニューで、「新しい列の追加」を選択します。
フィールドの追加というウインドウが開くので、
フィールド型を「TemplateField」に設定します。
ヘッダーテキストは適当でよいですが「状態」としておきます。
で、OKを押すとフィールドが追加されます。
もう一度GridViewのタスクメニューで今度は「テンプレートの編集」を
選択します。
(「テンプレート編集の終了」を選択すると元の表示に戻れます)

表示されたItemTemplateに、DropDownListをドロップし、
そのタスクメニュー「DataBindingsの編集」で図のように設定します。

2d85e0e1.gif

9b5440d6.gif







また、以前やったように、ドロップダウンリストにデータソースを結びつけ、
Statusテーブルの内容が、表示されるように設定します。
これはDropDownListのタスクメニュー「データソースの選択」から行います。
(<新しいデータソース>を選択します)

どうでしょうか?
動きましたか?
ついでに、もう一つ同じ手順でTypeテーブルからデータを持ってきて
「分類」フィールドも作ってみましょう。
このとき、データソースの名前をSqlDataSource1にしてしまうと
重複でエラーになってしまうので、SqlDataSource2とでもして置きます。

う?「DataBindingsの編集」でカスタムバインドしか選べない・・・
ここも微妙に本と違ったけど、コード式の部分を先ほどのフィールドの
マネをしてBind("TypeID", "{0}") と埋めたらちゃんと動きました!

うーむ、駆け足で本の通りやっただけだとちゃんと理解してるか
怪しいけど、まぁこんなこともできますってことで・・・
忘れたら図もとってあるから思い出せるでしょう^^;
最終的にはこんな感じです。

96e96ec1.gif






今回はここまでにしておきます。
「編集」「削除」ができるようになったので次回は「追加」です。
次もコード記述をしないでGUIだけでできてしまうようです。
でも自動でできるコードが間違ってるのはやっぱ勘弁してほしいなぁ~><

PR
postこの記事にコメントする
お名前
タイトル
文字色
メールアドレス
URL
コメント
パスワード   Vodafone絵文字 i-mode絵文字 Ezweb絵文字
無題
通りすがりの者です。
この問題で詰まっていました。ありがとうございます。
肌色タイプ 2011/07/04(Mon)14:20:43 編集
Re:無題
コメントありがとうございます!
お役に立ててなによりです~
【2011/07/04 20:53】
この記事へのトラックバック
この記事にトラックバックする:
[96]  [95]  [94]  [93]  [92]  [91]  [90]  [89]  [88]  [87]  [86
最新コメント
[02/22 search engine optimization]
[02/21 Skikefkef]
[02/16 nakedq]
[07/04 肌色タイプ]
[05/22 NONAME]
最新トラックバック
プロフィール
HN:
イフゼンエルス
性別:
男性
職業:
SE
みっくみくになーれ♪
フリーエリア
メールはこちら♪
広告
カレンダー
01 2012/02 03
S M T W T F S
1 2 3 4
6 8 9 10 11
12 13 14 15 16 18
19 20 22 23 24 25
26 27 28 29
カウンター
おすすめ?
IfThenElseのブログ Produced by イフゼンエルス
日めくりカレンダーBLUE Designed by がりんぺいろ
ブログ [PR]個人ローン 不動産