Frage

Ich bin mit einem FormView mit ein ObjectDataSource-und Bindung mit <%# Bind("WhateverProp") %> - und alle meine nullable-Spalten sind immer wieder mit default-Werten der Typ in Sie.

Es scheint, dass die FormView Objekt nicht ConvertEmtpyStringToNull Eigenschaft wie die anderen verbindliches Behälter tun.Ich habe Artikel gefunden, die darauf hindeutet, dass dies ein Fehler in VS 2005 / .Net 2.0 - aber nicht sehen, zu sagen, was die Auflösung war.

Hat jemand irgendwelche Vorschläge, wie kann ich das umgehen, ohne nur re-erfassen Sie alle Felder in der ODS_Inserting Veranstaltung?Ich würde lieber nicht haben, um code zu schreiben, um erneut zu binden alle meine gebunden Felder auf dem Formular nur zum test für null-Werte.

War es hilfreich?

Lösung

Kämpfte mit ihm auch.Für eine dropdownlist, weiß ich, dass:

AppendDataBoundItems="true"


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

Für meine ObjectDataSource, auch thoug meine UpdateMethod übernimmt einen einzelnen parameter, die Person, die ich hinzufügen, Aktualisieren params für jeden Nullable-Feld der Person, mit konvertieren NULL

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

Ich mache das gleiche für den Einsatz.

Funktioniert einwandfrei.

Andere Tipps

I ended up doing this - Art, die von einer Schrotflinte Ansatz, aber in diesem Fall alle meine leere string-Werte, null-Werte.Ich habe auch überlegt mit einem string-array im code angeben, welche Werte werden zurückgesetzt - und dann könnte nur eine loop-thru-string-array anstelle über alle Werte.

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;
        }
    }
}

In Ihrer DataSource-Objekt, das Sie hinzufügen müssen InsertParameters für jeden Ihrer nullable-Typ mit dem Attribut ConvertEmtpyStringToNull="True" :

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

Zitat:Tonio - ich bin nicht mit einzelnen params, aber DataObjectTypeName statt.Meine insert-Methode übernimmt einen einzelnen Parameter, und das ist die business-Objekt-will ich haben wieder in der Datenbank gespeichert.– Scott Ivey am 1. Mai um 12:57

Ich habe es behoben, wie diese:

 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);
     }
  }

Es ist ein kleiner hack, aber es funktioniert gut.Auf diese Weise können Sie die object-Eigenschaft auf null anstelle von string.leer, ohne mit der ConvertEmptyStringToNull Einstellung.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top