Элементы управления данными поддерживают несколько методов обработки нулевых значений или отсутствующих данных. Например, GridView, FormView и DetailsView поддерживают свойства EmptyDataText или EmptyDataTemplate. Если источник данных не возвращает строки данных, вы можете использовать эти свойства для указания содержимого, отображаемого элементом управления. Нам нужно установить только один из EmptyDataText и EmptyDataTemplate (если установлены оба, EmptyDataTemplate будет перегружен). Вы также можете указать свойство ConvertEmptyStringToNull для связанного поля (и производного типа поля), поля шаблона или объекта параметра источника данных, чтобы указать, что значение String.Empty от клиента должно быть преобразовано в нулевое значение перед связанной операцией с источником данных. называется.
ObjectDataSource также поддерживает свойство ConvertNullToDbNull. Если соответствующий метод требует использования DbNull для замены значения null (класс TableAdapter в наборе данных Visual Studio имеет такое требование), мы можем установить для этого свойства значение true. Вы также можете указать свойство NullDisplayText связанного поля (и производного типа поля), которое определяет содержимое, которое будет отображаться, когда значение поля, возвращаемое источником данных, равно нулю. Если значение не изменяется в режиме редактирования, оно будет возвращено серверному источнику данных как нулевое значение во время операции обновления. Наконец, вы также можете указать атрибут DefaultValue параметра источника данных. Если переданное значение параметра пусто, этот атрибут присвоит параметру значение по умолчанию. Эти свойства являются «цепочечными», например, если оба ConvertEmptyStringToNull и DefaultValue установлены, значение String.Empty сначала будет преобразовано в значение NULL, а затем преобразовано в значение по умолчанию.
<asp:DetailsView……>
<Поля>
<asp:BoundField DataField="Телефон" HeaderText="Телефон" NullDisplayText="нет в списке" SortExpression="Телефон" />
<asp:BoundField DataField="Факс" HeaderText="Факс" NullDisplayText="нет в списке" SortExpression="Факс" />
</Поля>
<EmptyDataTemplate>
<asp:Image ID="Image1" runat="server" ImageUrl="~/Images/warning.gif" />Нет записей для отображения
</EmptyDataTemplate>
</asp:DetailsView>
<asp:SqlDataSource……>
<Обновить параметры>
<asp:Parameter Name="ContactTitle" Type="String" DefaultValue="Owner" ConvertEmptyStringToNull="true" />
<asp:Parameter Name="Region" Type="String" ConvertEmptyStringToNull="true" />
<asp:Parameter Name="Phone" Type="String" ConvertEmptyStringToNull="true" />
<asp:Parameter Name="Fax" Type="String" ConvertEmptyStringToNull="true" />
<asp:Parameter Name="CustomerID" Type="String" />
</ОбновитьПараметры>
…
</asp:SqlDataSource>
Вы можете использовать эти свойства для обработки нулевых значений для реализации фильтра раскрывающегося списка, который изначально отображает все значения из источника данных, пока не будет выбрано значение в фильтре. Мы реализуем это следующим образом: сначала добавляем элемент данных с пустым строковым значением в раскрывающийся список и устанавливаем свойство ConvertEmptyStringToNull ControlParameter (параметр управления), связанное с раскрывающимся списком в источнике данных.
Затем в SelectCommand источника данных можно вернуть все (нефильтрованные) значения, обнаружив нулевые значения. В следующем примере этот метод демонстрируется с использованием простой команды SQL, но вы также можете выполнить проверку нуля при реализации хранимой процедуры. Обратите внимание на использование свойства AppendDataBoundItems раскрывающегося списка, которое позволяет добавлять значения из источника данных раскрывающегося списка к элементам данных «ВСЕ» (этот элемент добавляется нами статически). При этом следует отметить, что по умолчанию, если одно из значений соответствующих параметров, переданных в SelectCommand, пусто, SqlDataSource не будет выполнять операцию Select. Чтобы принудительно выполнить операцию Select при передаче нулевого значения, можно установить для ее свойства CancelSelectOnNullParameter значение false.
<asp:DropDownList AppendDataBoundItems="True" AutoPostBack="True" DataSourceID="SqlDataSource2" DataTextField="state" DataValueField="state" ID="DropDownList1" runat="server">
<asp:ListItem Value="">ALL</asp:ListItem>
</asp:DropDownList>
<asp:SqlDataSource ConnectionString="<%$ ConnectionStrings:Pubs %>" ID="SqlDataSource2" runat="server" SelectCommand="ВЫБРАТЬ ОТЛИЧНОЕ [состояние] ОТ [авторов]">
</asp:SqlDataSource>
<asp:SqlDataSource ConnectionString="<%$ ConnectionStrings:Pubs %>" ID="SqlDataSource1" runat="server" SelectCommand="ВЫБРАТЬ au_id, au_lname, au_fname, состояние FROM авторов WHERE state = IsNull( @state, state)" CancelSelectOnNullParameter="False">
<Выбрать параметры>
<asp:ControlParameter ControlID="DropDownList1" Name="state" PropertyName="SelectedValue" Type="String" />
</Выбрать параметры>
</asp:SqlDataSource>