Domanda

Io sto usando un FormView con un ObjectDataSource e vincolante usando <% # Bind ( "WhateverProp")%> - e tutti i miei colonne nullable stanno tornando con i valori di default del tipo in loro.

Sembra che l'oggetto FormView non ha una proprietà ConvertEmtpyStringToNull come gli altri contenitori vincolanti fanno. Ho trovato articoli che suggeriscono che si trattava di un bug in VS 2005 / .Net 2.0 -. Ma non vedo alcun dicendo ciò che la risoluzione era

Qualcuno ha qualche suggerimento su come posso risolvere questo senza appena ri-catturare tutti i campi in caso ODS_Inserting? Preferirei non dover scrivere il codice per ri-bind tutti i miei campi vincolato il modulo solo per verificare i valori nulli.

È stato utile?

Soluzione

lottato con esso anche. Per una DropDownList, lo faccio:

AppendDataBoundItems="true"


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

Per il mio ObjectDataSource, anche thoug mia UpdateMethod prende un solo parametro, l'entità, aggiungo Aggiornamento params per ogni campo Nullable dell'Ente con convert a NULL

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

io faccio lo stesso per l'inserto.

funziona bene.

Altri suggerimenti

ho finito per fare questo - tipo di un approccio fucile da caccia, ma in questo caso tutti dei miei valori di stringa vuoti devono essere nulli. Ho anche pensato di utilizzare un array di stringhe nel codice per specificare quali valori dovrebbero essere annullato -. E poi poteva solo ciclo attraverso l'array di stringhe, invece di corso tutti i valori

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

Nel vostro DataSource Object, è necessario aggiungere InsertParameters per ciascuno di vostro tipo di nullable con l'attributo ConvertEmtpyStringToNull = "True":

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

Citazione: Tonio - Non sto usando i singoli params, ma DataObjectTypeName invece. Il mio metodo di inserimento prende un singolo param, e questo è l'oggetto di business che voglio aver salvato al database. - Scott Ivey 1 maggio a 12:57

Ho risolto in questo modo:

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

E 'un piccolo hack, ma funziona bene. In questo modo è possibile impostare la proprietà oggetto a null invece di String.Empty senza utilizzare l'impostazione ConvertEmptyStringToNull.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top