Les contrôles de données prennent en charge plusieurs méthodes de gestion des valeurs nulles ou des données manquantes. Par exemple, GridView, FormView et DetailsView prennent tous en charge les propriétés EmptyDataText ou EmptyDataTemplate. Lorsque la source de données ne renvoie pas de lignes de données, vous pouvez utiliser ces propriétés pour spécifier le contenu affiché par le contrôle. Nous devons uniquement définir l'un des EmptyDataText et EmptyDataTemplate (si les deux sont définis, EmptyDataTemplate sera surchargé). Vous pouvez également spécifier la propriété ConvertEmptyStringToNull sur un champ dépendant (et un type de champ dérivé), un champ modèle ou un objet paramètre de source de données pour indiquer que la valeur String.Empty du client doit être convertie en valeur nulle avant l'opération de source de données associée. est appelé.
ObjectDataSource prend également en charge la propriété ConvertNullToDbNull Lorsque la méthode appropriée nécessite l'utilisation de DbNull pour remplacer la valeur null (la classe TableAdapter dans l'ensemble de données Visual Studio a cette exigence), nous pouvons définir cette propriété sur true. Vous pouvez également spécifier la propriété NullDisplayText du champ lié (et du type de champ dérivé), qui spécifie le contenu à afficher lorsque la valeur d'un champ renvoyé par la source de données est nulle. Si la valeur ne change pas en mode édition, la valeur sera renvoyée à la source de données backend sous la forme d'une valeur nulle lors de l'opération de mise à jour. Enfin, vous pouvez également spécifier l'attribut DefaultValue du paramètre de source de données. Si une valeur de paramètre transmise est vide, cet attribut attribuera une valeur par défaut au paramètre. Ces propriétés sont « réactives en chaîne », par exemple, si ConvertEmptyStringToNull et DefaultValue sont toutes deux définies, la valeur String.Empty sera d'abord convertie en null, puis convertie en valeur par défaut.
<Champs>
<asp:BoundField DataField="Téléphone" HeaderText="Téléphone" NullDisplayText="non répertorié" SortExpression="Téléphone" />
<asp:BoundField DataField="Fax" HeaderText="Fax" NullDisplayText="non répertorié" SortExpression="Fax" />
</Champs>
<asp:Image ID="Image1" runat="server" ImageUrl="~/Images/warning.gif" />Il n'y a aucun enregistrement à afficher
</EmptyDataTemplate>
</asp:VueDétails>
<Paramètres de mise à jour>
<asp:Parameter Name="ContactTitle" Type="String" DefaultValue="Owner" ConvertEmptyStringToNull="true" />
<asp:Nom du paramètre="Région" Type="String" ConvertEmptyStringToNull="true" />
<asp:Nom du paramètre="Téléphone" Type="String" ConvertEmptyStringToNull="true" />
<asp:Nom du paramètre="Fax" Type="String" ConvertEmptyStringToNull="true" />
<asp : Nom du paramètre="IDClient" Type="Chaîne" />
</Mise à jourParamètres>
…
Vous pouvez utiliser ces propriétés pour gérer les valeurs nulles afin d'implémenter un filtre de liste déroulante qui affiche initialement toutes les valeurs de la source de données jusqu'à ce qu'une valeur dans le filtre soit sélectionnée. Nous l'implémentons comme ceci : ajoutez d'abord un élément de données avec une valeur de chaîne vide à la liste déroulante et définissez la propriété ConvertEmptyStringToNull du ControlParameter (paramètre de contrôle) liée à la liste déroulante dans la source de données.
Ensuite, dans la SelectCommand de la source de données, vous pouvez renvoyer toutes les valeurs (non filtrées) en détectant les valeurs nulles. L'exemple suivant illustre cette technique à l'aide d'une simple commande SQL, mais vous pouvez également effectuer une vérification nulle dans l'implémentation d'une procédure stockée. Veuillez noter l'utilisation de la propriété AppendDataBoundItems de la liste déroulante, qui permet d'ajouter les valeurs de la source de données de la liste déroulante aux éléments de données "TOUS" (cet élément est ajouté statiquement par nos soins). Dans le même temps, il convient de noter que par défaut, si l'une des valeurs des paramètres pertinents transmises à SelectCommand est vide, SqlDataSource n'effectuera pas l'opération Select. Pour forcer l'exécution de l'opération Select lorsqu'une valeur nulle est passée, vous pouvez définir sa propriété CancelSelectOnNullParameter sur false.
<asp:ListItem Value="">TOUS</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 auteurs WHERE state = IsNull( @state, state)" CancelSelectOnNullParameter="False">
<SélectionnerParamètres>
<asp:ControlParameter ControlID="DropDownList1" Name="state" PropertyName="SelectedValue" Type="String" />
</SélectionnerParamètres>
</asp:SqlDataSource>