3 votes

Conversion d'un DBNull en booléen lors de la liaison avec une case à cocher dans un contrôle detailsview

C'est un peu idiot mais j'ai un DetailsView qui se lie à un enregistrement dans ma base de données à l'aide d'une sqlDataSource. Mon problème est que le champ auquel je me lie est un champ binaire (c'est-à-dire 1 ou 0) qui, à l'heure actuelle, autorise les valeurs nulles. Je suis conscient que cela doit changer, mais j'ai également besoin de pouvoir gérer les DBNulls du côté de l'interface graphique afin que l'application sache automatiquement qu'il faut définir la propriété Checked de la case à cocher à "false" si la valeur est DBNull. Actuellement, le champ de mon modèle ressemble à ceci.

 </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>

Tout fonctionne bien en mode affichage, mais lorsque je clique sur le lien Modifier dans le contrôle de la vue détaillée, j'obtiens l'erreur suivante :

L'objet ne peut pas être transformé de DBNull en d'autres types.

Des suggestions ?

Mise à jour :

J'ai besoin d'utiliser la liaison à deux voies via Bind() au lieu de Eval() lorsque la vue détaillée effectue une mise à jour de l'enregistrement sélectionné. Si j'utilise Convert.ToBoolean() avec Bind, une exception sera levée. Il se peut que je finisse par utiliser un champ CheckboxField. On pourrait penser qu'il existe un moyen simple de gérer cela, mais je n'ai pas eu la chance d'en trouver un.

15voto

adrift Points 24386

Vous pouvez essayer d'utiliser une condition pour vérifier la présence de DBNull.Value :

Eval("isCar") == DBNull.Value ? false : Convert.ToBoolean(Eval("isCar"))

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X