Muy buenas a todos, se me a presentado un problemilla que no consigo solucionar... a ver si a alguien se le ocurre algo...
Tengo un control de usuario que contiene el siguiente codigo html
Código:
<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" />
y como CodeBehind tengo:
Código:
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
Luego, a la hora de añadirlo a la coleccion de controles del panel al que lo quiero destinar tengo:
Código:
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
Ahora bien.... el ds de la funcion Usuario.getadminfunctions(Me.cn) se carga correctamente...
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.TxtPermiso.Text = Me.permiso
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?
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.