Datensteuerelemente unterstützen mehrere Methoden zum Umgang mit Nullwerten oder fehlenden Daten. Beispielsweise unterstützen GridView, FormView und DetailsView alle die Eigenschaften EmptyDataText oder EmptyDataTemplate. Wenn die Datenquelle keine Datenzeilen zurückgibt, können Sie diese Eigenschaften verwenden, um den vom Steuerelement angezeigten Inhalt anzugeben. Wir müssen nur eines von EmptyDataText und EmptyDataTemplate festlegen (wenn beide festgelegt sind, wird EmptyDataTemplate überladen). Sie können die ConvertEmptyStringToNull-Eigenschaft auch für ein gebundenes Feld (und einen abgeleiteten Feldtyp), ein Vorlagenfeld oder ein Datenquellenparameterobjekt angeben, um anzugeben, dass der String.Empty-Wert vom Client vor dem zugehörigen Datenquellenvorgang in einen Nullwert konvertiert werden muss heißt .
ObjectDataSource unterstützt auch die ConvertNullToDbNull-Eigenschaft. Wenn die entsprechende Methode die Verwendung von DbNull zum Ersetzen des Nullwerts erfordert (die TableAdapter-Klasse im Visual Studio-Datensatz hat diese Anforderung), können wir diese Eigenschaft auf true setzen. Sie können auch die NullDisplayText-Eigenschaft des gebundenen Felds (und des abgeleiteten Feldtyps) angeben, die den Inhalt angibt, der angezeigt werden soll, wenn der Wert eines von der Datenquelle zurückgegebenen Felds null ist. Wenn sich der Wert im Bearbeitungsmodus nicht ändert, wird der Wert während des Aktualisierungsvorgangs als Nullwert an die Backend-Datenquelle zurückgegeben. Schließlich können Sie auch das DefaultValue-Attribut des Datenquellenparameters angeben. Wenn ein übergebener Parameterwert leer ist, weist dieses Attribut dem Parameter einen Standardwert zu. Diese Eigenschaften sind „kettenreaktiv“. Wenn beispielsweise ConvertEmptyStringToNull und DefaultValue beide festgelegt sind, wird der String.Empty-Wert zunächst in Null und dann in den Standardwert konvertiert.
<asp:BoundField DataField="Telefon" HeaderText="Telefon" NullDisplayText="nicht aufgeführt" SortExpression="Telefon" />
<asp:BoundField DataField="Fax" HeaderText="Fax" NullDisplayText="nicht aufgeführt" SortExpression="Fax" />
</Felder>
<asp:Image ID="Image1" runat="server" ImageUrl="~/Images/warning.gif" />Es sind keine anzuzeigenden Datensätze vorhanden
</EmptyDataTemplate>
</asp:DetailsView>
<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" />
</UpdateParameters>
…
Mit diesen Eigenschaften können Sie Nullwerte verarbeiten, um einen Dropdown-Listenfilter zu implementieren, der zunächst alle Werte aus der Datenquelle anzeigt, bis ein Wert im Filter ausgewählt wird. Wir implementieren es wie folgt: Fügen Sie zunächst ein Datenelement mit einem leeren Zeichenfolgenwert zur Dropdown-Liste hinzu und legen Sie die ConvertEmptyStringToNull-Eigenschaft des ControlParameters (Steuerparameter) fest, der sich auf die Dropdown-Liste in der Datenquelle bezieht.
Anschließend können Sie im SelectCommand der Datenquelle alle (ungefilterten) Werte zurückgeben, indem Sie Nullwerte erkennen. Das folgende Beispiel veranschaulicht diese Technik mithilfe eines einfachen SQL-Befehls. Sie können jedoch auch eine Nullprüfung in der Implementierung einer gespeicherten Prozedur durchführen. Bitte beachten Sie die Verwendung der AppendDataBoundItems-Eigenschaft der Dropdown-Liste, die es ermöglicht, Werte aus der Dropdown-Listen-Datenquelle zu den Datenelementen „ALL“ (dieses Element wird von uns statisch hinzugefügt) hinzuzufügen. Gleichzeitig sollten wir beachten, dass SqlDataSource standardmäßig keine Select-Operation ausführt, wenn einer der Werte der relevanten Parameter, die an SelectCommand übergeben werden, leer ist. Um die Ausführung des Select-Vorgangs zu erzwingen, wenn ein Nullwert übergeben wird, können Sie die Eigenschaft „CancelSelectOnNullParameter“ auf „false“ festlegen.
<asp:ListItem Value="">ALL</asp:ListItem>
</asp:DropDownList>
<asp:SqlDataSource ConnectionString="<%$ ConnectionStrings:Pubs %>" ID="SqlDataSource2" runat="server" SelectCommand="SELECT DISTINCT [state] FROM [authors]">
</asp:SqlDataSource>
<asp:SqlDataSource ConnectionString="<%$ ConnectionStrings:Pubs %>" ID="SqlDataSource1" runat="server" SelectCommand="SELECT au_id, au_lname, au_fname, state FROM Authors WHERE state = IsNull( @state, state)" CancelSelectOnNullParameter="False">
<asp:ControlParameter ControlID="DropDownList1" Name="state" PropertyName="SelectedValue" Type="String" />
</SelectParameters>
</asp:SqlDataSource>