2010-02-26 19 views
5

He estado luchando para que FormViews funcione de la forma en que Microsoft me espera durante aproximadamente un día y me imagino un montón de cosas geniales.¿Cómo evito que FormView elimine los valores ingresados ​​del usuario después de que se haya activado el método de inserción?

Puedo capturar e.Exception y e.ReturnValue en ObjectDataSource.Inserting Event Handler e incluso puedo hacer trampa y verificar otras propiedades del Object en ObjectDataSource.ObjectDisposing comprobando el e.ObjectInstance ... e incluso aprendí que el Manejador de inserción de FormView se ejecuta DESPUÉS del Manejador de exposición de objetos, por lo que si se encuentra un problema, todavía tengo tiempo para reaccionar y poner e.KeepInInsertMode en verdadero en FormView.

Mi problema es que parece que los valores ingresados ​​por el usuario en el formulario Insertar se borran independientemente.

Entonces, ¿cómo puedo evitar que un FormView se borre después de que se ha disparado el método de inserción?

(mediante ASP.NET + VB)

no creo publicar mi código aquí a hacer mucho bien y me habría que modificarla para recortar cosas lógica comercial confidencial ... así que' Lo omitiré por ahora.

edición:

He encontrado una solución temporal y la verdad es terriblemente cludgy (en caso de que nadie encuentra una solución real al problema).

tengo una variable de página define como:

Dim eInsertArgs As FormViewInsertedEventArgs 

Y luego hacer lo siguiente en mi manejador ItemInserted

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

Luego, en cada uno de los controles que tengo algo como esto en que los controles evento de enlace de datos:

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

El efecto de esto es que estoy estableciendo los valores VUELVA a los valores enviados DESPUÉS de que ASP.NET vincule el FormView a la plantilla predeterminada (en blanco).

Ayúdenme a encontrar una solución menos terrible. :)

+0

usted debe presentar su edición con la solución como una respuesta. –

Respuesta

1

Debe crear su propio control de servidor que se hereda del control 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 

favor, eche un vistazo a esta página: http://www.dotnetmonster.com/Uwe/Forum.aspx/asp-net/76885/FormView-Insert

Cuestiones relacionadas