2010-02-26 7 views
5

Ho fatto fatica a far funzionare FormViews nel modo in cui Microsoft mi aspetta per circa un giorno e ho trovato un sacco di cose interessanti.Come impedire a FormView di cancellare i valori immessi dall'utente dopo l'attivazione di Insert Method?

posso prendere e.Exception e e.ReturnValue nel gestore di eventi ObjectDataSource.Inserting e posso anche barare e verificare le altre proprietà dell'oggetto nel ObjectDataSource.ObjectDisposing controllando l'e.ObjectInstance ... e ho anche ho appreso che il gestore di inserimento di FormView gira DOPO il gestore di ObjectDisposing quindi se c'è un problema riscontrato ho ancora tempo per reagire ad esso e st e.KeepInInsertMode su true su FormView.

Il mio problema è che sembra che i valori immessi dall'utente nel modulo di inserimento vengano cancellati a prescindere.

Quindi, come impedire a una maschera di eseguire la cancellazione dopo l'attivazione del metodo di inserimento?

(utilizzando ASP.NET + VB)

Non credo postare il mio codice qui sarà davvero fare molto bene e avrei dovuto modificarlo per tagliare fuori roba logica di business riservate ... così ho' Lo salterò per ora.

edit:

Ho trovato una soluzione temporanea e certamente terribilmente cludgy (nel caso in cui nessuno ha mai trova una soluzione reale al problema).

ho una variabile pagina definita come:

Dim eInsertArgs As FormViewInsertedEventArgs 

E poi faccio la seguente nel mio gestore ItemInserted

If boolInsertErrorOccurred = False Then 
     e.KeepInInsertMode = True 
     eInsertArgs = e 
    Else 
     eInsertArgs = Nothing 
    End If 

Poi su ciascuno dei controlli che ho qualcosa di simile a che i controlli evento dati:

If IsNothing(eInsertArgs) = False Then 
     Dim _sender As TextBox = sender 
     _sender.Text = eInsertArgs.Values("_FieldName") 
    End If 

L'effetto di questo è che sto impostando i valori TORNA ai valori inviati DOPO ASP.NET associa il FormView al modello (vuoto) predefinito.

Per favore aiutami a trovare una soluzione meno terribile. :)

+0

si dovrebbe presentare la modifica con la soluzione come una risposta. –

risposta

1

È necessario creare il proprio controllo server che eredita dal controllo FormView.

Public Class MyFormView 
    Inherits FormView 

Protected Overrides Sub OnDataSourceViewChanged(ByVal sender As Object, 
ByVal e As EventArgs) 
    If (MyBase.CurrentMode = FormViewMode.Insert) Then 
      MyBase.RequiresDataBinding = False 
    Else 
      MyBase.OnDataSourceViewChanged(sender, e) 
    End If 
End Sub 

End Class 

Si prega di dare un'occhiata a questa pagina: http://www.dotnetmonster.com/Uwe/Forum.aspx/asp-net/76885/FormView-Insert

Problemi correlati