2009-04-15 9 views
6

estoy fijando la CurrentMode de un FormView al modo de inserción utilizando el método ChangeMode en el evento Page_Load de este modo:Los controles no retener valores después de la devolución de datos cuando FormView ajustado al modo de inserción

if(!Page.IsPostBack) 
{ 
    MyFormView.ChangeMode(FormViewMode.Insert); 
} 

Dentro de la plantilla de inserción de mi FormView I tener un control DropDownList con su propiedad AutoPostBack establecida en verdadero. También tengo varios otros controles DropDownList y TextBox dentro de la plantilla de inserción.

Cada vez que cambio la selección de DropDownList y se produce una devolución de datos, estoy perdiendo todos los valores ingresados ​​en los controles. Lo extraño es que si uso ChangeMode para configurar el FormView para insertar el modo en cualquier momento después de la carga de la página inicial, no tengo el problema. He recorrido el código con el depurador y todo parece estar sucediendo correctamente, pero en algún momento después de que mi controlador de eventos para la DropDownList ejecute todo parece que se está restableciendo.

¿Qué está pasando aquí?

Actualización: Me di cuenta de que mi FormView estaba dentro de una etiqueta div con runat = "server" y enableviewstate = "false". Una vez que habilité viewstate para el contenedor div comencé a ver un comportamiento ligeramente diferente. El FormView aún no conserva los valores después de la primera devolución de datos, pero ahora las devoluciones subsiguientes funcionan bien y los valores se conservan.

Cualquier idea sería muy apreciada.

Respuesta

0

Trate

MyFormView.EnableViewState = true; 
+0

ViewState está habilitado para el control FormView. – joshb

-1

intento para cambiar el modo en la página Init o o eventos PreRender

+0

Intenté ambas sugerencias y no tuve suerte. – joshb

0

Las cargas ViewState antes pageLoad y mi conjetura es que cambiando el modo en pageLoad recrea otra serie de controles, las unos en su EditItemTemplate. Si está configurado de manera predeterminada en el modo de edición, y que descomenta esa línea en PageLoad, ¿mantendrá los valores? Debería hacerlo si no cambia el modo.

0

FormView.ChangeMode (FormViewMode.Insert)

Esto debe trabajar, comprobar la identificación y el uso de intelisense?

mi ejemplo es con una forma vista del elemento a modo d ..

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 
    AddNewItemFormView.ChangeMode(FormViewMode.Insert) 
End Sub 

tratar de hacerlo al cargar la página sin ningún tipo de "IF..THEN", si funciona sabrá que no es el expresión, pero tal vez el contenido si o construcción. Recuerda hacer que las identificaciones de control sean significativas, por lo que será más fácil y menos probable que cometas errores cuando necesites usarlas o llamarlas a través de intelisense.

La mejor suerte.

:)

2

Esta respuesta de otro foro por Walter Wang [MSFT] - el 26 de Ene de 2007 03:29 GMT

En primer lugar, el problema parece ser que el FormView es contada por los datos fuente de control que los datos han cambiado, y por lo tanto, debe volver a enlazar para obtener los nuevos datos. En realidad, esto no debería haberse hecho ya que aún estamos en modo Insertar.Tengo una solución para su referencia : Heredar de FormView para crear su propio control FormView, anulación OnDataSourceViewChanged y establecer RequiresDataBinding en false si estamos en modo Insertar:

public class MyFormView : FormView 
    { 
     protected override void OnDataSourceViewChanged(object sender, 
EventArgs e) 
     { 
      if (this.CurrentMode == FormViewMode.Insert) 
      { 
       this.RequiresDataBinding = false; 
      } 
      else 
      { 
       base.OnDataSourceViewChanged(sender, e); 
      } 
     } 
    } 

He probado de mi lado y parece funcionar correctamente. Por favor, dele una prueba y avíseme el resultado.

+0

Incluya el enlace a la fuente si puede. – JSuar

+0

Esto no funcionó para mí –

0

Estoy teniendo el problema similar de viewstate no retenido en la plantilla EditItem. Configuración EnableViewState = true tampoco ayuda.

lo que hago es conseguir la función OnUpdated(), y al final de la función,

e.KeepInEditMode = true; 

Espero que esto ayude ..

+1

Si tiene una nueva pregunta, por favor, haga clic en el botón [Ask Question] (http://stackoverflow.com/questions/ask). Si tiene suficiente reputación, [puede votar] (http://stackoverflow.com/privileges/vote-up) la pregunta. Alternativamente, "star" como favorito y se te notificará cualquier nueva respuesta. – Swadq

+0

KeepInEditMode solo hace que la vista de formulario permanezca en modo de edición después de hacer clic en un botón con un comando de actualización No tiene nada que ver con retener datos no ingresados ​​y nuevos datos de entrada http://msdn.microsoft.com/en -us/library/system.web.ui.webcontrols.formviewupdatedeventargs.keepineditmode.aspx "De forma predeterminada, el control FormView vuelve al modo especificado por la propiedad DefaultMode después de una operación de actualización. Use la propiedad KeepInEditMode para especificar si el control FormView debe permanecer en modo de edición ". –

Cuestiones relacionadas