EmptyDataText/EmptyDataTemplate:資料來源無資料列時顯示 (GridView、FormView、DetailsView)。BoundField.NullDisplayText:欄位值為 DBNull 時顯示指定文字 (如 "未列出")。ConvertEmptyStringToNull="true" (BoundField、Parameter):使用者清空輸入 (String.Empty) 自動轉為 null 傳遞給資料源操作。ConvertNullToDbNull="true" (ObjectDataSource):商業邏輯方法要求 DBNull.Value 而非 null 時啟用 (TableAdapter 典型需求)。Parameter.DefaultValue:傳入參數為 null 時使用預設值。鏈式反應:ConvertEmptyStringToNull + DefaultValue → 空字串 → null → 預設值。
<asp:DropDownList ID="DropDownList1" AppendDataBoundItems="True" AutoPostBack="True"
DataSourceID="SqlDataSource2" DataTextField="state" DataValueField="state">
<asp:ListItem Value="">ALL</asp:ListItem>
</asp:DropDownList>
<asp:SqlDataSource ID="SqlDataSource1" SelectCommand="SELECT ... WHERE state = ISNULL(@state, state)"
CancelSelectOnNullParameter="False">
<SelectParameters>
<asp:ControlParameter ControlID="DropDownList1" Name="state" PropertyName="SelectedValue"
Type="String" ConvertEmptyStringToNull="true" />
</SelectParameters>
</asp:SqlDataSource>
關鍵點:AppendDataBoundItems 保留靜態「ALL」項、ConvertEmptyStringToNull 將空值轉 null、SQL 使用 ISNULL(@param, col) 忽略篩選、CancelSelectOnNullParameter="False" 強制執行查詢。
<asp:DetailsView ...>
<Fields>
<asp:BoundField DataField="Phone" NullDisplayText="not listed" />
<asp:BoundField DataField="Fax" NullDisplayText="not listed" />
</Fields>
<EmptyDataTemplate>
<asp:Image ImageUrl="~/Images/warning.gif" /> 無資料可顯示
</EmptyDataTemplate>
</asp:DetailsView>
<asp:SqlDataSource ...>
<UpdateParameters>
<asp:Parameter Name="ContactTitle" DefaultValue="Owner" ConvertEmptyStringToNull="true" />
<asp:Parameter Name="Region" ConvertEmptyStringToNull="true" />
<asp:Parameter Name="Phone" ConvertEmptyStringToNull="true" />
<asp:Parameter Name="Fax" ConvertEmptyStringToNull="true" />
</UpdateParameters>
</asp:SqlDataSource>