Os controles de dados oferecem suporte a vários métodos para lidar com valores nulos ou dados ausentes. Por exemplo, GridView, FormView e DetailsView suportam propriedades EmptyDataText ou EmptyDataTemplate. Quando a fonte de dados não retorna linhas de dados, você pode usar essas propriedades para especificar o conteúdo exibido pelo controle. Precisamos apenas definir um de EmptyDataText e EmptyDataTemplate (se ambos estiverem definidos, EmptyDataTemplate ficará sobrecarregado). Você também pode especificar a propriedade ConvertEmptyStringToNull em um campo vinculado (e tipo de campo derivado), campo de modelo ou objeto de parâmetro de fonte de dados para indicar que o valor String.Empty do cliente deve ser convertido em um valor nulo antes da operação de fonte de dados associada é chamado.
ObjectDataSource também oferece suporte à propriedade ConvertNullToDbNull Quando o método relevante requer o uso de DbNull para substituir o valor nulo (a classe TableAdapter no conjunto de dados do Visual Studio tem esse requisito), podemos definir essa propriedade como true. Você também pode especificar a propriedade NullDisplayText do campo vinculado (e tipo de campo derivado), que especifica o conteúdo a ser exibido quando o valor de um campo retornado pela fonte de dados for nulo. Se o valor não mudar no modo de edição, o valor será retornado à fonte de dados de back-end como um valor nulo durante a operação de atualização. Finalmente, você também pode especificar o atributo DefaultValue do parâmetro da fonte de dados. Se um valor de parâmetro passado estiver vazio, esse atributo atribuirá um valor padrão ao parâmetro. Essas propriedades são "reativas em cadeia", por exemplo, se ConvertEmptyStringToNull e DefaultValue estiverem definidos, o valor String.Empty será primeiro convertido em nulo e, em seguida, convertido no valor padrão.
<asp:DetalhesVisualizar......>
<Campos>
<asp:BoundField DataField="Telefone" HeaderText="Telefone" NullDisplayText="não listado" SortExpression="Telefone" />
<asp:BoundField DataField="Fax" HeaderText="Fax" NullDisplayText="não listado" SortExpression="Fax" />
</Campos>
<EmptyDataTemplate>
<asp:Image ID="Image1" runat="server" ImageUrl="~/Images/warning.gif" />Não há registros para exibir
</EmptyDataTemplate>
</asp:DetailsView>
<asp:SqlDataSource……>
<Atualizar parâmetros>
<asp:Parameter Name="ContactTitle" Type="String" DefaultValue="Owner" ConvertEmptyStringToNull="true" />
<asp:Parameter Name="Região" Type="String" ConvertEmptyStringToNull="true" />
<asp:Parameter Name="Telefone" Type="String" ConvertEmptyStringToNull="true" />
<asp:Parameter Name="Fax" Type="String" ConvertEmptyStringToNull="true" />
<asp:Nome do Parâmetro="CustomerID" Type="String" />
</Parâmetros de atualização>
…
</asp:SqlDataSource>
Você pode usar essas propriedades para manipular valores nulos para implementar um filtro de lista suspensa que inicialmente exibe todos os valores da fonte de dados até que um valor no filtro seja selecionado. Implementamos assim: primeiro adicione um item de dados com um valor de string vazio à lista suspensa e defina a propriedade ConvertEmptyStringToNull do ControlParameter (parâmetro de controle) relacionado à lista suspensa na fonte de dados.
Em seguida, no SelectCommand da fonte de dados, você pode retornar todos os valores (não filtrados) detectando valores nulos. O exemplo a seguir demonstra essa técnica usando um comando SQL simples, mas você também pode executar a verificação de nulos na implementação de um procedimento armazenado. Observe o uso da propriedade AppendDataBoundItems da lista suspensa, que permite que valores da fonte de dados da lista suspensa sejam adicionados aos itens de dados "TODOS" (este item é adicionado estaticamente por nós). Ao mesmo tempo, devemos observar que, por padrão, se um dos valores dos parâmetros relevantes passados para SelectCommand estiver vazio, o SqlDataSource não executará a operação Select. Para forçar a execução da operação Select quando um valor nulo é passado, você pode definir sua propriedade CancelSelectOnNullParameter como 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="SELECT DISTINCT [estado] FROM [autores]">
</asp:SqlDataSource>
<asp:SqlDataSource ConnectionString="<%$ ConnectionStrings:Pubs %>" ID="SqlDataSource1" runat="server" SelectCommand="SELECT au_id, au_lname, au_fname, estado FROM autores WHERE estado = IsNull( @estado, estado)" CancelSelectOnNullParameter="False">
<Selecionar Parâmetros>
<asp:ControlParameter ControlID="DropDownList1" Name="estado" PropertyName="SelectedValue" Type="String" />
</Selecionar Parâmetros>
</asp:SqlDataSource>