Tengo un control de usuario que contiene el siguiente codigo html
Código:
y como CodeBehind tengo:<table width="100%"> <tr> <td class="controlpermisot1"> Permiso: </td> <td class="controlpermisot2"> <asp:TextBox ID="TxtPermiso" runat="server" Width="98%"></asp:TextBox> </td> <td class="controlpermisot3"> Descripcion: </td> <td> <asp:TextBox ID="TxtDescripcion" runat="server" Width="98%"></asp:TextBox> </td> <td class="controlpermisot1"> <asp:Button ID="Modificar" runat="server" Text="Modificar" CssClass="botongeneral" /> </td> </tr> </table> <asp:HiddenField ID="HdnPermiso" runat="server" /> <asp:HiddenField ID="HdnDescripcion" runat="server" />
Código:
Luego, a la hora de añadirlo a la coleccion de controles del panel al que lo quiero destinar tengo:Imports Intranetdll Public Class Permiso Inherits System.Web.UI.UserControl Private _permiso As String Private _descripcion As String ''' <summary> ''' Obtiene o establece la descripcion del permiso ''' </summary> ''' <value></value> ''' <returns></returns> ''' <remarks></remarks> Public Property permiso As String Get Return Me._permiso End Get Set(ByVal value As String) Me._permiso = value End Set End Property ''' <summary> ''' Obtiene o establece la descripcion del permiso ''' </summary> ''' <value></value> ''' <returns></returns> ''' <remarks></remarks> Public Property descripcion As String Get Return Me._descripcion End Get Set(ByVal value As String) Me._descripcion = value End Set End Property Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load Try Me.TxtPermiso.Text = Me.permiso Me.HdnPermiso.Value = Me.permiso Me.TxtDescripcion.Text = Me.descripcion Me.HdnDescripcion.Value = Me.descripcion Catch ex As Exception End Try End Sub ''' <summary> ''' Establece el texto que aparecerá en los controles ''' </summary> ''' <param name="permiso">El nombre con el que aparece el permiso</param> ''' <param name="descripcion">La descripción del permiso</param> ''' <remarks></remarks> Public Sub New(ByVal permiso As String, ByVal descripcion As String) MyBase.New() Me.permiso = permiso Me.descripcion = descripcion End Sub Public Sub New() MyBase.New() Me.permiso = "" Me.descripcion = "" End Sub Protected Sub Modificar_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Modificar.Click Dim opermiso As String = Me.HdnPermiso.Value Dim odescripcion As String = Me.HdnDescripcion.Value Dim npermiso As String = Me.TxtPermiso.Text Dim ndescripcion As String = Me.TxtDescripcion.Text Try Usuario.editfunction(ConfigurationManager.ConnectionStrings("SqlServices").ToString, opermiso, odescripcion, npermiso, ndescripcion) Me.HdnPermiso.Value = npermiso Me.HdnDescripcion.Value = ndescripcion Catch ex As Exception End Try End Sub End Class
Código:
Ahora bien.... el ds de la funcion Usuario.getadminfunctions(Me.cn) se carga correctamente...Dim ds As New DataSet Try ds = Usuario.getadminfunctions(Me.cn) Catch ex As Exception Me.lblError.Visible = True End Try For Each row As DataRow In ds.Tables("funciones").Rows Dim permiso As String = "" Dim descripcion As String = "" If row.Item("Description") IsNot Nothing Then permiso = row.Item("Description").ToString End If If row.Item("ExtendedDescription") IsNot Nothing Then descripcion = row.Item("ExtendedDescription").ToString End If Dim p As New Permiso(permiso, descripcion) Me.PanelAdministracion.Controls.Add(p) Dim txt As New TextBox Me.PanelAdministracion.Controls.Add(txt) Me.Label1.Text = Me.PanelAdministracion.Controls.Item(1).GetType.ToString Next
Al crear la instancia nueva de mi control de usuario... depurandolo compruebo como el sub new con parametros se ejecuta correctamente... y guardan su valor sin problemas.
El control se añade sin problemas tambien al panel ya que se ve en depuracion como su .count aumenta...
Creo el nuevo textbox... y lo añado a la coleccion del panel comprobando que tambien aumenta su .count.... y para mas inri, le tiro un gettype al control de usuario que añado y el label me saca el nombre de control correctamente.
Hata aqui todo correcto.... ahora...
Si dejo tal como está el sub load del control.... al ejecutarse:
Código:
me peta y me dice que necesito crear una instancia nueva... supongo que del textbox pero.... me.permiso contiene el valor correcto ¿Porque debo instanciar un nuevo textbox si está dentro del control y deberia tener acceso?Me.TxtPermiso.Text = Me.permiso
Si elimino el sub load, la aplicacion no peta pero.... se carga el textbox y no se carga mi control de usuario aunque el label me diga que es del tipo de mi control!!!!
¿Alguien sabria darme una explicación?
Muchas gracias de antemano y un saludo.