Преобразование DBNull в логическое значение при привязке к флажку в элементе управления подробного просмотра - PullRequest
3 голосов
/ 07 декабря 2011

Это довольно глупо, но у меня есть DetailsView, который привязывается к записи в моей базе данных, используя sqlDataSource.Моя проблема в том, что поле, к которому я привязываю, является битовым полем (i, e 1 или 0), которое в настоящее время допускает нулевые значения.Я понимаю, что это нужно изменить, но мне также нужно иметь возможность обрабатывать DBNulls на стороне графического интерфейса, чтобы приложение автоматически знало, что для свойства Checked флажка установлено значение «false», если значение равно 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 к другим типам.

Есть предложения?

Обновление:

Мне нужно использовать 2-стороннее связывание через Bind () вместоEval () как представление сведений выполняет обновление выбранной записи.Если я использую Convert.ToBoolean () с Bind, будет приведено исключение.Я могу в конечном итоге использовать CheckboxField.Можно подумать, что будет простой способ справиться с этим, но мне не повезло найти его.

1 Ответ

14 голосов
/ 07 декабря 2011

Вы можете попробовать условную проверку для DBNull.Value:

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