3

これはちょっとばかげていますが、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を使用してしまう可能性があります。これを処理する簡単な方法があると思うかもしれませんが、私はそれを見つけることができませんでした。

4

1 に答える 1

15

あなたは以下をチェックするために条件を試すことができますDBNull.Value

Eval("isCar") == DBNull.Value ? false : Convert.ToBoolean(Eval("isCar"))
于 2011-12-07T19:38:21.317 に答える