データ コントロールは、Null 値または欠落データを処理するためのいくつかの方法をサポートしています。たとえば、GridView、FormView、DetailsView はすべて EmptyDataText プロパティまたは EmptyDataTemplate プロパティをサポートしており、データ ソースがデータ行を返さない場合は、これらのプロパティを使用してコントロールによって表示されるコンテンツを指定できます。 EmptyDataText と EmptyDataTemplate のいずれかを設定するだけで済みます (両方を設定すると、EmptyDataTemplate がオーバーロードされます)。バインド フィールド (および派生フィールド タイプ)、テンプレート フィールド、またはデータ ソース パラメーター オブジェクトで ConvertEmptyStringToNull プロパティを指定して、関連付けられたデータ ソース操作の前にクライアントからの String.Empty 値を null 値に変換する必要があることを示すこともできます。と呼ばれます。
ObjectDataSource は、ConvertNullToDbNull プロパティもサポートしています。関連するメソッドで DbNull を使用して null 値を置き換える必要がある場合 (Visual Studio データ セットの TableAdapter クラスにはこの要件があります)、このプロパティを true に設定できます。また、バインドされたフィールド (および派生フィールドの種類) の NullDisplayText プロパティを指定することもできます。これにより、データ ソースから返されたフィールドの値が null の場合に表示されるコンテンツを指定します。編集モードで値が変更されない場合、値は更新操作中に null 値としてバックエンド データ ソースに返されます。最後に、データ ソース パラメーターの DefaultValue 属性を指定することもできます。渡されたパラメーター値が空の場合、この属性はパラメーターにデフォルト値を割り当てます。これらのプロパティは「チェーンリアクティブ」です。たとえば、ConvertEmptyStringToNull と DefaultValue の両方が設定されている場合、String.Empty 値は最初に null に変換され、次にデフォルト値に変換されます。
<asp:詳細ビュー……>
<フィールド>
<asp:BoundField DataField="Phone" HeaderText="Phone" NullDisplayText="リストにありません" SortExpression="Phone" />
<asp:BoundField DataField="Fax" HeaderText="Fax" NullDisplayText="リストにありません" SortExpression="Fax" />
</フィールド>
<空のデータテンプレート>
<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:パラメータ名="Fax" Type="String" ConvertEmptyStringToNull="true" />
<asp:パラメータ名="顧客ID" タイプ="文字列" />
</UpdateParameters>
…
</asp:SqlDataSource>
これらのプロパティを使用して null 値を処理し、最初にフィルター内の値が選択されるまでデータ ソースのすべての値を表示するドロップダウン リスト フィルターを実装できます。このように実装します。まず、空の文字列値を持つデータ項目をドロップダウン リストに追加し、データ ソースのドロップダウン リストに関連する ControlParameter (コントロール パラメーター) の ConvertEmptyStringToNull プロパティを設定します。
次に、データ ソースの SelectCommand で、NULL 値を検出することで、すべての (フィルターされていない) 値を返すことができます。次の例では、単純な SQL コマンドを使用してこの手法を示していますが、ストアド プロシージャの実装で null チェックを実行することもできます。ドロップダウン リストの AppendDataBoundItems プロパティの使用に注意してください。これにより、ドロップダウン リスト データ ソースの値を「ALL」(この項目は当社によって静的に追加されます) データ項目に追加できます。同時に、デフォルトでは、SelectCommand に渡される関連パラメーターの値の 1 つが空の場合、SqlDataSource は Select 操作を実行しないことに注意してください。 Null 値が渡されたときに 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:ドロップダウンリスト>
<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" />
</パラメータの選択>
</asp:SqlDataSource>