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.


