Los controles de datos admiten varios métodos para manejar valores nulos o datos faltantes. Por ejemplo, GridView, FormView y DetailsView admiten las propiedades EmptyDataText o EmptyDataTemplate. Cuando la fuente de datos no devuelve filas de datos, puede utilizar estas propiedades para especificar el contenido que muestra el control. Solo necesitamos configurar uno de ellos, EmptyDataText y EmptyDataTemplate (si ambos están configurados, EmptyDataTemplate se sobrecargará). También puede especificar la propiedad ConvertEmptyStringToNull en un campo vinculado (y tipo de campo derivado), campo de plantilla u objeto de parámetro de fuente de datos para indicar que el valor String.Empty del cliente debe convertirse en un valor nulo antes de la operación de fuente de datos asociada. se llama.
ObjectDataSource también admite la propiedad ConvertNullToDbNull. Cuando el método relevante requiere usar DbNull para reemplazar el valor nulo (la clase TableAdapter en el conjunto de datos de Visual Studio tiene este requisito), podemos establecer esta propiedad en verdadero. También puede especificar la propiedad NullDisplayText del campo vinculado (y el tipo de campo derivado), que especifica el contenido que se mostrará cuando el valor de un campo devuelto por la fuente de datos es nulo. Si el valor no cambia en el modo de edición, el valor se devolverá a la fuente de datos del servidor como un valor nulo durante la operación de actualización. Finalmente, también puede especificar el atributo DefaultValue del parámetro de fuente de datos. Si un valor de parámetro pasado está vacío, este atributo asignará un valor predeterminado al parámetro. Estas propiedades son "reactivas en cadena", por ejemplo, si se configuran ConvertEmptyStringToNull y DefaultValue, el valor String.Empty primero se convertirá a nulo y luego al valor predeterminado.
<asp:VistaDetalles……>
<Campos>
<asp:BoundField DataField="Teléfono" HeaderText="Teléfono" NullDisplayText="no listado" SortExpression="Teléfono" />
<asp:BoundField DataField="Fax" HeaderText="Fax" NullDisplayText="no listado" SortExpression="Fax" />
</Campos>
<Plantilla de datos vacía>
<asp:Image ID="Image1" runat="server" ImageUrl="~/Images/warning.gif" />No hay registros para mostrar
</PlantillaDeDatosEmpty>
</asp:VerDetalles>
<asp:FuenteDeDatosSql……>
<Actualizar parámetros>
<asp:Nombre del parámetro="Titulo de contacto" Tipo="Cadena" DefaultValue="Propietario" ConvertEmptyStringToNull="true" />
<asp:Nombre del parámetro="Región" Tipo="Cadena" ConvertEmptyStringToNull="true" />
<asp:Nombre del parámetro="Teléfono" Tipo="Cadena" ConvertEmptyStringToNull="true" />
<asp:Nombre del parámetro="Fax" Tipo="Cadena" ConvertEmptyStringToNull="true" />
<asp:Nombre del parámetro="ID de cliente" Tipo="Cadena" />
</Actualizar parámetros>
…
</asp:SqlDataSource>
Puede usar estas propiedades para manejar valores nulos para implementar un filtro de lista desplegable que inicialmente muestra todos los valores de la fuente de datos hasta que se selecciona un valor en el filtro. Lo implementamos así: primero agregamos un elemento de datos con un valor de cadena vacío a la lista desplegable y configuramos la propiedad ConvertEmptyStringToNull del ControlParameter (parámetro de control) relacionado con la lista desplegable en la fuente de datos.
Luego, en el SelectCommand de la fuente de datos, puede devolver todos los valores (sin filtrar) detectando valores nulos. El siguiente ejemplo demuestra esta técnica utilizando un comando SQL simple, pero también puede realizar una verificación de nulos en la implementación de un procedimiento almacenado. Tenga en cuenta el uso de la propiedad AppendDataBoundItems de la lista desplegable, que permite agregar valores de la fuente de datos de la lista desplegable a los elementos de datos "TODOS" (este elemento lo agregamos estáticamente). Al mismo tiempo, debemos tener en cuenta que, de forma predeterminada, si uno de los valores de los parámetros relevantes pasados a SelectCommand está vacío, SqlDataSource no realizará la operación Seleccionar. Para forzar la ejecución de la operación Seleccionar cuando se pasa un valor nulo, puede establecer su propiedad CancelSelectOnNullParameter en falso.
<asp:DropDownList AppendDataBoundItems="True" AutoPostBack="True" DataSourceID="SqlDataSource2" DataTextField="estado" DataValueField="estado" ID="DropDownList1" runat="servidor">
<asp:ListItem Value="">ALL</asp:ListItem>
</asp:ListaDesplegable>
<asp:SqlDataSource ConnectionString="<%$ ConnectionStrings:Pubs %>" ID="SqlDataSource2" runat="servidor" SelectCommand="SELECT DISTINCT [estado] DE [autores]">
</asp:SqlDataSource>
<asp:SqlDataSource ConnectionString="<%$ ConnectionStrings:Pubs %>" ID="SqlDataSource1" runat="server" SelectCommand="SELECT au_id, au_lname, au_fname, estado DE los autores DONDE estado = IsNull( @estado, estado)" CancelSelectOnNullParameter="False">
<Seleccionar parámetros>
<asp:ControlParameter ControlID="DropDownList1" Nombre="estado" PropertyName="SelectedValue" Tipo="Cadena" />
</Seleccionar parámetros>
</asp:SqlDataSource>