Question

J'utilise un FormView avec un ObjectDataSource et la liaison en utilisant <% # Bind ( « WhateverProp »)%> - et toutes mes colonnes nullables reviennent avec des valeurs par défaut du type en eux.

Il semble que l'objet FormView ne dispose pas d'une propriété ConvertEmtpyStringToNull comme les autres conteneurs de liaison font. J'ai trouvé des articles laissant entendre que ce fut un bogue dans VS 2005 / .Net 2.0 -. Mais tu ne vois pas dire ce que la résolution était

Quelqu'un at-il des suggestions quant à la façon dont je peux contourner ce sans juste re-capturer tous les champs en cas de ODS_Inserting? Je préfère ne pas avoir à écrire du code pour re-lier tous mes champs liés à la forme juste pour tester les valeurs NULL.

Était-ce utile?

La solution

avec elle aussi Lutté. Pour une dropdownlist, je fais ça:

AppendDataBoundItems="true"


<asp:ListItem Text="" Value=""></asp:ListItem>

Pour ma ObjectDataSource, même thoug mon UpdateMethod prend un seul paramètre, l'entité, ajouter params Mise à jour pour chaque Nullable Domaine de l'entité avec convert NULL

<UpdateParameters>
    <asp:Parameter Name="No_Empl_Ferme" Type="Int32" ConvertEmptyStringToNull="true" />
</UpdateParameters>

Je fais la même chose pour l'insertion.

fonctionne très bien.

Autres conseils

J'ai fini par le faire - une sorte de fusil de chasse, mais dans ce cas tous de mes valeurs de chaîne vides doivent être nulls. J'ai aussi pensé à utiliser un tableau de chaînes dans le code pour spécifier les valeurs doivent être nulled -. Et pourrait tout simplement en boucle à travers le tableau de chaînes au lieu de plus toutes les valeurs

protected void RequestItemFormView_ItemInserting(object sender, FormViewInsertEventArgs e)
{
    for (int i = 0; i < e.Values.Count - 1; i++)
    {
        if (e.Values[i].ToString() == string.Empty)
        {
            e.Values[i] = null;
        }
    }
}

Dans votre DataSource d'objets, vous devez ajouter InsertParameters pour chacun de vos type Nullable avec l'attribut ConvertEmtpyStringToNull = "true":

<InsertParameters>
   <asp:Parameter Name="NullableFieldName" Type="Int32" ConvertEmptyStringToNull="true"  />            
</InsertParameters>

Citation: Tonio - Je ne suis pas en utilisant params individuels, mais DataObjectTypeName à la place. Ma méthode d'insertion prend un seul param, et qui est l'objet métier que je veux avoir sauvé revenir à la base de données. - 1 à 12:57 Scott Ivey mai

Je l'ai fixé comme ceci:

 protected void FormViewSettings_ItemUpdating(object sender, FormViewUpdateEventArgs e)
  {
     OrderedDictionary values = e.NewValues as OrderedDictionary;

     var personID = values["PersonID"];

     if (string.IsNullOrEmpty(personID.ToString()))
     {
        values.Remove("PersonID");
        values.Add("PersonID", null);
     }
  }

Il est un petit hack mais il fonctionne très bien. De cette façon, vous pouvez régler sans utiliser le paramètre ConvertEmptyStringToNull la propriété d'objet à null au lieu de String.Empty.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top