2011-10-05 19 views
8

Tengo un GridView con algunos BoundFields y dos TemplateFields. En estos dos TemplateFields, creo dinámicamente UserControls que contiene un DropDownList y un TextBox, que los usuarios pueden modificar.columnas dinámicas desaparecen después de la devolución de datos

Cuando intento obtener los valores de los controles después de PostBack, los valores en BoundFields siguen allí, pero mis controles dinámicos desaparecen. Puedo crearlos de nuevo pero no obtendrá los valores del usuario ... ¿Cómo puedo obtener estos valores antes de que se pierdan?

He aquí algunos de mi código:

En el caso RowDataBound:

Select Case type 
    Case "BooleanBis" 
     e.Row.Cells(2).Controls.Clear() 
     Dim list1 As BooleanBisList = New BooleanBisList(avant, False) 
     e.Row.Cells(2).Controls.Add(list1) 

     e.Row.Cells(4).Controls.Clear() 
     Dim list2 As BooleanBisList = New BooleanBisList(apres, True) 
     e.Row.Cells(4).Controls.Add(list2) 
    Case "Boolean" 
     e.Row.Cells(2).Controls.Clear() 
     Dim list3 As BooleanList = New BooleanList(avant, False) 
     e.Row.Cells(2).Controls.Add(list3) 

     e.Row.Cells(4).Controls.Clear() 
     Dim list4 As BooleanList = New BooleanList(apres, True) 
     e.Row.Cells(4).Controls.Add(list4) 
End Select 

En mi botón de evento de clic, que intenta conseguir el control de usuario:

Case "String" 
    temp.ChampValeurApres = DirectCast(Tableau1.Rows(i).Cells(selectedColumn).Controls(1), TextBox).Text 

pero me sale el error de que no existe.

Respuesta

8

Debe crear controles dinámicos en lugar de RowCreatedRowDataBound ya que este evento se activa en cada devolución de datos mientras que RowDataBound solamente se disparará cuando el GridView consigue DataBound a que es DataSource.

controles dinámicamente creados deben volver a crearse en cada devolución de datos con el mismo ID que antes, entonces ellos conservan sus valores en el ViewState y eventos dispararán correctamente (f.e. SelectedIndexChanged caso de un DropDownList).

Por lo que debe crearlos en RowCreated y "rellenar" en RowDataBound (F. E. las DropDownList origen de datos/Artículos o un TextBox -Text).

+0

¡Muchas gracias! todavía tengo un problema, tengo una columna con controles de solo lectura. y el valor de estos controles no se recupera después de la devolución de datos. alguna idea ? – user874854

+0

@ user874854: los controles 'readonly' no mantienen los cambios en el lado del cliente en ViewState (solo cambios en el lado del servidor). Conviértelos 'readonly' en [Atributos] (http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.webcontrol.attributes.aspx) -collection, por ejemplo:' TextBox1.Attributes .Add ("readonly", "readonly"); '. De esta manera engañas a ASP.NET. Mira [aquí] (http://www.codeproject.com/KB/aspnet/Readonly.aspx) para más información. –

0

que había estado utilizando:

EnableViewState="false" 

en los GridView atributos. ¡Eliminarlo resolvió mi problema!

Cuestiones relacionadas