これはちょっとばかげていますが、sqlDataSourceを使用してデータベース内のレコードにバインドするDetailsViewがあります。私の問題は、バインドしているフィールドがビットフィールド(つまり、1または0)であり、現在nullを許可していることです。これを変更する必要があることはわかっていますが、値がDBNullの場合にアプリケーションがチェックボックスのCheckedプロパティを「false」に設定することをアプリケーションが自動的に認識できるように、GUI側でDBNullを処理できる必要もあります。現在、私のテンプレートフィールドは次のようになっています。
</asp:TemplateField>
<asp:TemplateField HeaderText="Car:" HeaderStyle-Width="15%" ItemStyle-Width="85%">
<ItemTemplate>
<asp:Label ID="lblIsCar" runat="server" Text='<%# Eval("isCar") %>' />
</ItemTemplate>
<EditItemTemplate>
<asp:CheckBox ID="ckIsCar" runat="server" Checked='<%# Convert.ToBoolean(Eval("isCar"))%>' />
</EditItemTemplate>
</asp:TemplateField>
ビューモードではすべて正常に動作しますが、詳細ビューコントロールの[編集]リンクをクリックすると、次のエラーが発生します。
オブジェクトをDBNullから他のタイプにキャストすることはできません。
助言がありますか?
アップデート:
詳細ビューが選択したレコードの更新を実行するため、Eval()ではなくBind()を介した双方向バインディングを使用する必要があります。Convert.ToBoolean()をBindと一緒に使用すると、例外がキャストされます。CheckboxFieldを使用してしまう可能性があります。これを処理する簡単な方法があると思うかもしれませんが、私はそれを見つけることができませんでした。