初心者の質問かもしれませんが、事前にお詫び申し上げます。(asp.netの新機能、VBでのコーディング、最良のコントロールに関する知識はありません)。私はAJAXコントロールに興味がないこと、またはMVCを使用してjavascriptを最小化しようとしていることには関心がないことを尊重してください。私がしなければならないことは、テクノロジーの面で非常に単純です。
ユーザーがデータベースデータを編集できるフォームを開発しています。従来のvbaアプリのようにフォーマットできるように、FormViewを使用することを選択しました。データソースをデータベーステーブルに設定できます。VWDでコントロールを自動的にフォーマットできるようにすると、データベースの値が正常に表示されます。このフォームを使用して、データベース内のすべてを編集することもできます。
ただし、上司は日付を入力する必要がありません。
フォームビューに自動的に組み込まれるテキストボックスのように機能するデータソース機能を備えた日付ピッカーコントロールを見つけることができませんでした(データソース機能へのバインドを使用)。だから、私は何も存在しないと仮定しています。私がしなければならないと思うことが正しい方法であるといういくつかの保証が必要です。
フロントエンドのautomagicalのものを介してFormViewコントロールのデータソースを使用する代わりに、代わりに
- フォームビューのすべての日付フィールドのカレンダーとテキストボックスを単純に組み合わせるこれらのデータピッカーコントロールの1つを配置します(それらを作成した人を軽視せず、機能が豊富ではないと信じることができません。これは、番号を与える必要があるようです利用可能な日付ピッカーの)
- Page_Loadでデータソースを宣言し、FindControlを使用して既存のデータがある場合は、すべてのコントロールをロードします
- Data_Boundブロックを使用して、FindControlを使用して各コントロールから選択した値を取得し、更新用の動的SQL文字列を作成します
- おそらくDataBoundで、ブロックの背後にあるコードの1つを使用して、データベースを宣言および更新します
私は正しい方向に進んでいますか?私は自分の仮定に自信を持っている経験がありません。もっと簡単な方法があれば、私はそれを取りますが、私はそれを「きれい」にする必要があります。そして、あらゆる種類のコントロールの提案を歓迎します。
---私の問題のさらに詳しくこれは私が実際にこれを解決しようとしたことを証明するためのいくつかのコードです...私のFormViewコードブロックには次のものがあります:
<asp:FormView ID="FormView1" runat="server" DataKeyNames="MASTERID_Action"
DataSourceID="srcAction">
<EditItemTemplate>
MASTERID_Action:
<asp:Label ID="MASTERID_ActionLabel1" runat="server"
Text='<%# Eval("MASTERID_Action") %>' />
<br />
Action_Description:
<asp:TextBox ID="Action_DescriptionTextBox" runat="server"
Text='<%# Bind("Action_Description") %>' />
<br />
Action_Target:
<asp:TextBox ID="Action_TargetTextBox" runat="server"
Text='<%# Bind("Action_Target") %>' />
<br />
Action_Captured:
<asp:TextBox ID="Action_CapturedTextBox" runat="server"
Text='<%# Bind("Action_Captured") %>' />
<br />
Action_Declined:
<asp:TextBox ID="Action_DeclinedTextBox" runat="server"
Text='<%# Bind("Action_Declined") %>' />
<br />
Action_AgreedDate:
<ewc:CalendarPopup ID="CalendarPopup1" runat="server" Culture="en-AU"
PostedDate="" SelectedDate='<%# Bind("Action_AgreedDate") %>'
SelectedValue="01/14/2013 08:47:54" UpperBoundDate="12/31/9999 23:59:59"
VisibleDate="01/14/2013 08:47:54" />
<br />
...
</EditItemTemplate>
私のデータベースは、このAction_AgreedDateをnull許容として保持しています。ItemTemplateを(ブラウザーで)表示すると、日付は0.000と表示され(テキストフィールドであり、Action_AgreedDateにバインドされているため、エラーは発生しません)、[編集]をクリックしてEditItemTemplateに移動すると、次のエラーが発生します。 「日付」を入力する「DBNull」は無効です。
説明:現在のWebリクエストの実行中に未処理の例外が発生しました。エラーとそれがコードのどこで発生したかについての詳細は、スタックトレースを確認してください。
例外の詳細:System.InvalidCastException:タイプ「DBNull」からタイプ「日付」への変換が無効です。
ソースエラー:
95
行目:96行目:Action_AgreedDate:97行目:'99行目:SelectedValue = "01/14/2013 08:47:54" UpperBoundDate = "12/31/9999 23:59:59"
これは、「コントロールがnullフィールドを検出し、それをどう処理するかわからない」と簡単に変換できます。問題は、どうしたらいいかわからないということです。フィールドのプロパティを確認しました(CalendarPOPフィールドで、nullを処理するための設定があり、何も明らかではないかどうかを確認しました。現在、オンラインでコントロールに関する詳細なドキュメントを見つけようとしています(eWorldに連絡しました。彼らが応答できることを願っています。)
また、すでにAction_AgreedDateがあるレコードを要求した場合、コントロールが表示する値がデータベースに存在するため、エラーは発生しません。