<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>FabricioLeon&#039;s Blog</title>
	<atom:link href="http://fabricioleon.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://fabricioleon.wordpress.com</link>
	<description>Software Architect</description>
	<lastBuildDate>Thu, 12 Jan 2012 18:10:15 +0000</lastBuildDate>
	<language>es</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='fabricioleon.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>FabricioLeon&#039;s Blog</title>
		<link>http://fabricioleon.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://fabricioleon.wordpress.com/osd.xml" title="FabricioLeon&#039;s Blog" />
	<atom:link rel='hub' href='http://fabricioleon.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Conversiones de Base / Conversiones en Sistemas de Numeración</title>
		<link>http://fabricioleon.wordpress.com/2011/09/16/conversiones-de-base-conversiones-en-sistemas-de-numeracion/</link>
		<comments>http://fabricioleon.wordpress.com/2011/09/16/conversiones-de-base-conversiones-en-sistemas-de-numeracion/#comments</comments>
		<pubDate>Fri, 16 Sep 2011 22:56:13 +0000</pubDate>
		<dc:creator>fabricioleon</dc:creator>
				<category><![CDATA[Programacion ASP.Net VB]]></category>

		<guid isPermaLink="false">http://fabricioleon.wordpress.com/?p=60</guid>
		<description><![CDATA[Saludos estimados programeros, A continuación les posteo un pequeño sistema que hace conversiones entre bases en el sistema de numeración. Básicamente lo que hace es transformar un numero de cualquier base a cualquier base. Es posible que alguien pueda interesarse. &#8230; <a href="http://fabricioleon.wordpress.com/2011/09/16/conversiones-de-base-conversiones-en-sistemas-de-numeracion/">Sigue leyendo <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=fabricioleon.wordpress.com&amp;blog=14174403&amp;post=60&amp;subd=fabricioleon&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<pre>Saludos estimados programeros,

A continuación les posteo un pequeño sistema que hace
conversiones entre bases en el sistema de numeración.

Básicamente lo que hace es transformar
un numero de cualquier base a cualquier base.

Es posible que alguien pueda interesarse.
Aquí os dejo el fuente del sistema y un link para descarga.  
Está desarrollado en Visual Basic .NET 2008.

Saludos.

========================================
El ejecutable: <a href="http://www.totemdevelopers.com/files/conversiones/publish.htm">Descargar</a>

El fuente: <a href="http://www.totemdevelopers.com/files/conversiones/SistemasDeNumeracion.zip">Descargar</a>
========================================

Public Class Form1

    Dim Result As String
    Dim Enterprise As String = "Totem Software Developers"

    Private Sub btnGo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnGo.Click
        Try
            Result = ""
            If ValidateBases(Me.txtBaseOrigen.Text.Trim) And ValidateBases(Me.txtBaseDestine.Text.Trim) Then
                If ValidateNumber(CInt(Me.txtBaseOrigen.Text.Trim), Me.txtNumberToConvert.Text.Trim) Then
                    If CInt(txtBaseOrigen.Text) = 10 Then
                        Me.lblResult.Text = ConvertToAnotherBase(CInt(Me.txtNumberToConvert.Text.Trim), CInt(Me.txtBaseDestine.Text.Trim))
                    ElseIf CInt(txtBaseDestine.Text) = 10 Then
                        Me.lblResult.Text = ConvertToBase10(Me.txtNumberToConvert.Text.Trim, CInt(Me.txtBaseOrigen.Text.Trim))
                    Else
                        Me.lblResult.Text = ConvertToAnotherBase(CInt(ConvertToBase10(Me.txtNumberToConvert.Text.Trim, CInt(Me.txtBaseOrigen.Text.Trim))), CInt(Me.txtBaseDestine.Text.Trim))
                    End If
                Else
                    MsgBox("El numero a convertir no pertenece a la base origen. Por favor, verifíquelo.", MsgBoxStyle.Information, Enterprise)
                End If
            Else
                Me.lblResult.Text = ""
            End If
        Catch ex As Exception
            MsgBox(ex.Message, MsgBoxStyle.Information, Enterprise)
        End Try
    End Sub

    Function ValidateNumber(ByRef BaseOrigen As Integer, ByRef Numero As String) As Boolean
        For i As Integer = 0 To Numero.Length - 1
            If CInt(GetDecimalEqual(Numero.Substring(Numero.Length - 1 - i, 1), BaseOrigen)) &gt;= BaseOrigen Then
                Return False
            End If
        Next
        Return True
    End Function

    Function ValidateBases(ByRef Itm As Object, Optional ByVal TextToShowOnError As String = "Verifique los valores ingresados") As Boolean
        Try
            Dim vl As Integer = CInt(Itm)
        Catch ex As Exception
            MsgBox(TextToShowOnError, MsgBoxStyle.Information, Enterprise)
            Return False
        End Try
        Return True
    End Function

    Function ConvertToBase10(ByRef Numero As String, ByRef BaseOrigen As Integer) As String
        Dim Acumula As Integer = 0
        If BaseOrigen &gt;= 2 And BaseOrigen &lt;= 16 Then
            For i As Integer = 0 To Numero.Length - 1
                Acumula += CInt(GetDecimalEqual(Numero.Substring(Numero.Length - 1 - i, 1), BaseOrigen)) * (BaseOrigen ^ i)
            Next
        Else
            MsgBox("Base no soportada", MsgBoxStyle.Exclamation, Enterprise)
            Return ""
        End If
        Return Acumula.ToString
    End Function

    Function ConvertToAnotherBase(ByRef Dividendo As Integer, ByRef Divisor As Integer) As String
        If Divisor &gt;= 2 And Divisor &lt;= 16 Then
            Dim Cociente As Integer = Dividendo \ Divisor
            Dim Resto As String = (Dividendo - (Cociente * Divisor)).ToString
            GetHexaEqual(Resto, Divisor)
            If Cociente &gt;= Divisor Then
                ConvertToAnotherBase(Cociente, Divisor)
            Else
                GetHexaEqual(Cociente, Divisor)
            End If
        Else
            MsgBox("Base no soportada", MsgBoxStyle.Exclamation, Enterprise)
        End If
        Return Result
    End Function

    Sub GetHexaEqual(ByRef Number As String, ByRef Base As Integer)
        If Base &gt; 9 And CInt(Number) &gt; 9 Then
            Select Case CInt(Number)
                Case 10
                    Result = "A" &amp; Result
                Case 11
                    Result = "B" &amp; Result
                Case 12
                    Result = "C" &amp; Result
                Case 13
                    Result = "D" &amp; Result
                Case 14
                    Result = "E" &amp; Result
                Case 15
                    Result = "F" &amp; Result
            End Select
        Else
            Result = Number &amp; Result
        End If
    End Sub

    Function GetDecimalEqual(ByRef Number As String, ByRef Base As Integer) As String
        If Base &gt; 9 Then
            Select Case Number
                Case "A"
                    Return "10"
                Case "B"
                    Return "11"
                Case "C"
                    Return "12"
                Case "D"
                    Return "13"
                Case "E"
                    Return "14"
                Case "F"
                    Return "15"
            End Select
        End If
        Return Number
    End Function

End Class</pre>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/fabricioleon.wordpress.com/60/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/fabricioleon.wordpress.com/60/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/fabricioleon.wordpress.com/60/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/fabricioleon.wordpress.com/60/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/fabricioleon.wordpress.com/60/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/fabricioleon.wordpress.com/60/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/fabricioleon.wordpress.com/60/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/fabricioleon.wordpress.com/60/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/fabricioleon.wordpress.com/60/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/fabricioleon.wordpress.com/60/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/fabricioleon.wordpress.com/60/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/fabricioleon.wordpress.com/60/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/fabricioleon.wordpress.com/60/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/fabricioleon.wordpress.com/60/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=fabricioleon.wordpress.com&amp;blog=14174403&amp;post=60&amp;subd=fabricioleon&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://fabricioleon.wordpress.com/2011/09/16/conversiones-de-base-conversiones-en-sistemas-de-numeracion/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/7eacc063fd6725f9123214b617fa09c0?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">fabricioleon</media:title>
		</media:content>
	</item>
		<item>
		<title>Crear Controles Dinamicos ASP .Net</title>
		<link>http://fabricioleon.wordpress.com/2010/06/13/crear-controles-dinamicos-asp-net/</link>
		<comments>http://fabricioleon.wordpress.com/2010/06/13/crear-controles-dinamicos-asp-net/#comments</comments>
		<pubDate>Sun, 13 Jun 2010 06:25:07 +0000</pubDate>
		<dc:creator>fabricioleon</dc:creator>
				<category><![CDATA[Programacion ASP.Net VB]]></category>
		<category><![CDATA[Programacion VB .Net]]></category>
		<category><![CDATA[Crear Controles Dinamicos Automaticos ASP .Net a partir de una base de datos]]></category>

		<guid isPermaLink="false">http://fabricioleon.wordpress.com/?p=4</guid>
		<description><![CDATA[Crear Controles Dinamicos ASP .Net a partir de una base de datos Dentro del codigo HTML de una página aspx llamada SmartControls por ejemplo, tengo una estructura X, pero lo importante es que ubiques dentro del codigo siguiente la asp:TableCell &#8230; <a href="http://fabricioleon.wordpress.com/2010/06/13/crear-controles-dinamicos-asp-net/">Sigue leyendo <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=fabricioleon.wordpress.com&amp;blog=14174403&amp;post=4&amp;subd=fabricioleon&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><strong><em><span style="text-decoration:underline;"><span style="color:#003300;">Crear Controles Dinamicos ASP .Net a partir de una base de datos</span></span></em></strong></p>
<p><span style="color:#003300;">Dentro del </span><strong><span style="color:#003300;">codigo HTML</span></strong><span style="color:#003300;"> de una página aspx llamada SmartControls por ejemplo, tengo una estructura X, pero lo importante es que ubiques dentro del codigo siguiente la asp:TableCell llamada &#8220;TDCentral&#8221; que se va a convertir en nuestro contenedor master de nuestros controles dinamicos:</span></p>
<p>&lt;asp:TableCell runat=&#8221;server&#8221; ColumnSpan=&#8221;2&#8243;&gt;</p>
<p>&lt;asp:Table CssClass=&#8221;tabla&#8221; ID=&#8221;TBCentral&#8221; runat=&#8221;server&#8221;&gt;</p>
<p>&lt;asp:TableRow runat=&#8221;server&#8221;&gt;</p>
<p>&lt;asp:TableCell runat=&#8221;server&#8221;&gt;Working&#8230; please wait&#8230;</p>
<p>&lt;/asp:TableCell&gt;</p>
<p>&lt;/asp:TableRow&gt;</p>
<p>&lt;asp:TableRow&gt;</p>
<p>&lt;asp:TableCell runat=&#8221;server&#8221;mso-bidi-font-weight:normal&#8221;&gt;TDCentral&#8221; VerticalAlign=&#8221;Top&#8221; HorizontalAlign=&#8221;Left&#8221;&gt;</p>
<p>&lt;/asp:TableCell&gt;</p>
<p>&lt;/asp:TableRow&gt;</p>
<p>&lt;/asp:Table&gt;</p>
<p>&lt;/asp:TableCell&gt;</p>
<p><strong><em>Ok, luego en el codigo VB:</em></strong></p>
<p><em>OJO esto debe ir dentro del SUB LOAD de la pagina:</em><em> </em></p>
<p>Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load</p>
<p><em>&#8216;Aquí tengo una clase llamada LION que es la que hace muchas cosas entre ellas la conexion con la base de datos y  dentro de esta clase implemento una función llamada DATARECOVERY que es la que me entrega una syste.data.Datatable como resultado de un query que solicito se ejecute. </em><em>Mira:</em></p>
<p>Lion.DataRecovery(&#8220;select * from ws_smartpages_controls where menucode = &#8216; &#8221; &amp; Request.QueryString(&#8220;cdi&#8221;).ToString.Trim &amp; &#8221; &#8216; order by ControlOrder&#8221;, TBDetails)</p>
<p><em>&#8216;En la sentencia anterior puedes fijarte que con mi clase LION ejecuto un sql que me trae el resultado en la tabla &#8220;TBDetails&#8221;, y es que en esta tabla ws_smartpages_controls tengo almacenados los controles que voy a usar en esta página.</em></p>
<p><em>&#8216;Para darte una idea más clara del asunto te debo indicar que :</em></p>
<p><em>&#8216; Request.QueryString(&#8220;cdi&#8221;).ToString.Trim es el parámetro que me pasa la pagina menú al hacer clic en uno de sus submenús de tal manera que la consulta en la base me devuelve todo lo que tiene la tabla ws_smartpages_controls pero que el menucode sea igual a este request</em></p>
<p><em>&#8216;Así entonces, tu puedes crear una tabla con una estructura en la que estén los parámetros más relevantes para crear los controles automáticos o dinámicos.</em></p>
<p><em>&#8216;Ahora, creare un asp:Table para que contenga a los controles que vamos creando y que a su vez luego la incluiré en la TDCentral, recuerdan.., la TableCEll que les pedí que identificaran en el código HTML.</em></p>
<p>Dim TBContainer as new Table</p>
<p><em>‘Luego crearé un bucle FOReach “que significa por cada”, para leer una a una las ROWS de la tabla TBDetails</em></p>
<p>Foreach R as system.data.datarow in TBDetails.Rows  <em>‘Es decir, por cada DataRow que tenga la DataTable TBDetails</em></p>
<p><em>‘Ahora, usando la característica polimórfica de una variable tipo Objeto, cambiaré o transmutaré éste al objeto que necesito,</em></p>
<p><em>‘Sin embargo, se debe recordar que luego de mutado el Objeto, no se podrá cambiar su tipo sin perder su estructura y contenidos en general, y esto hay que tenerlo muy presente al manejar el nuevo Objeto.</em></p>
<p>Dim Ctrl As Object</p>
<p><em>&#8216;En el siguiente SELECT CASE pregunto el contenido de la ROW R en su columna CONTROLTYPE, que en realidad es un campo que contiene las tres primeras letras del  tipo de control que deseo implementar.</em></p>
<p>Select Case R(&#8220;ControlType&#8221;).ToString.ToUpper.Trim.Substring(0, 3)</p>
<p>Case &#8220;LBL&#8221;</p>
<p>Ctrl = New Label &#8216; Transmuto el Objeto CTRL a un asp:Label</p>
<p>Case &#8220;TXT&#8221;</p>
<p>Ctrl = New TextBox  &#8216; Transmuto el Objeto CTRL a un asp:Textbox</p>
<p>Case &#8220;LON&#8221;</p>
<p>Ctrl = New TextBox  &#8216; Transmuto el Objeto CTRL a un asp:Textbox</p>
<p><em>&#8216;Ctype se usa para identificar un objeto con un tipo. Aquí indico que el textbox admitirá múltiples líneas:</em></p>
<p>CType(Ctrl, TextBox).TextMode = TextBoxMode.MultiLine</p>
<p>Case &#8220;PWD&#8221;</p>
<p>Ctrl = New TextBox</p>
<p>CType(Ctrl, TextBox).TextMode = TextBoxMode.Password <em>&#8216;Aquí indico que el textbox será de tipo password por así decirlo</em></p>
<p>Case &#8220;CMB&#8221;</p>
<p>Ctrl = New DropDownList <em>&#8216; Transmuto el Objeto CTRL a un asp:</em><em> </em><em>DropDownList</em></p>
<p><em>&#8216; Para este control usare un campo de la tabla que he llamado QueryControl en el que almaceno una consulta SQL que poblara o llenara el control DropDownList, bueno y de hecho utilizo este campo para</em> <em>llenar también un RadioButomList o un CheckBoxList o el contenido por defecto de un label o un textbox, pero eso se los indicare más adelante. Por el momento recordemos que un DropDownList o un RadioButonList implementan dos valores, el primero es el VALUE que va escondido o detrás del segundo o TEXT que muestra cada listItem, es decir, estos controles se llenan con listItems, y cada listItem tiene un VALUE y un TEXT.  Siendo así, el query o consulta sql que contiene este campo de la tabla debe traer dos valores, por ejemplo:</em></p>
<p><em>&#8216;Select CodigoArticulo, DescripcionArticulo from articulos</em></p>
<p><em>&#8216;Así, siempre tomare el primer campo para el Value del DropDownList y el segundo para mostrar al usuario, asi:</em></p>
<p>If R(&#8220;QueryControl&#8221;).ToString.ToLower.Trim &lt;&gt; &#8220;&#8221; And R(&#8220;QueryControl&#8221;).ToString.ToLower.Trim.Length &gt; 0 Then<em> &#8216;Pregunto si el campo no está vacio</em></p>
<p>Dim TBAux as new system.data.datatable</p>
<p>Lion.DataRecovery(R(&#8220;QueryControl&#8221;).ToString.ToLower.Trim, TBAux)</p>
<p><em>&#8216; para efectos del ejemplo esto sería como si ejecutara: </em></p>
<p><em>Lion.DataRecovery(&#8220;select CodigoArticulo, DescripcionArticulo from articulos&#8221;, TBAux)</em></p>
<p><em>‘Como te indique antes esta clase me retorna una tabla llena, en este caso con dos columnas</em></p>
<p><em>&#8216;Indico que el nombre de la columna cero, llenara el value del control</em><em>: </em></p>
<p>CType(Ctrl, DropDownList).DataValueField = TBAux.Columns(0).ColumnName<em> </em></p>
<p><em>&#8216;Indico que el nombre de la columna uno, llenara el text del control:</em></p>
<p>CType(Ctrl, DropDownList).DataTextField = TBAux.Columns(1).ColumnName</p>
<p><em>&#8216;Acá indico que el datasource de mi control se llenara con el contenido de la TBAux resultante del sql:</em></p>
<p>CType(Ctrl, DropDownList).DataSource = TBAux</p>
<p>End If</p>
<p>Case &#8220;OPT&#8221;</p>
<p>Ctrl = New RadioButtonList  <em>&#8216; Transmuto el Objeto CTRL a un asp: RadioButtonList</em></p>
<p><em>&#8216;Para este control usare un campo de la tabla que he llamado QueryControl en el que almaceno una consulta SQL que poblara o llenara el control RadioButtonList, bueno y de hecho utilizo este campo para llenar también un RadioButomList o un CheckBoxList o el contenido por defecto de un label o un textbox, pero eso se los indicare más adelante. Por el momento recordemos que un DropDownList o un RadioButonList implementan dos valores, el primero es el VALUE que va escondido o detrás del segundo o TEXT que muestra cada listItem, es decir, estos controles se llenan con listItems, y cada listItem tiene un VALUE y un TEXT.  Siendo así, el query o consulta sql que contiene este campo de la tabla debe traer dos valores, por ejemplo:</em></p>
<p><em>&#8216;Select CodigoArticulo, DescripcionArticulo from articulos</em></p>
<p><em>&#8216;Así, siempre tomare el primer campo para el Value del RadioButtonList y el segundo para mostrar al usuario, así:</em></p>
<p>If R(&#8220;QueryControl&#8221;).ToString.ToLower.Trim &lt;&gt; &#8220;&#8221; And R(&#8220;QueryControl&#8221;).ToString.ToLower.Trim.Length &gt; 0 Then <em>&#8216;Pregunto si el campo no está vacio</em></p>
<p>Dim TBAux as new system.data.datatable</p>
<p>Lion.DataRecovery(R(&#8220;QueryControl&#8221;).ToString.ToLower.Trim, TBAux)</p>
<p><em>&#8216;para efectos del ejemplo esto sería como si ejecutara: </em></p>
<p><em>Lion.DataRecovery(&#8220;select CodigoArticulo, DescripcionArticulo from articulos&#8221;, TBAux)</em></p>
<p><em>&#8216;Ahora, como te indique antes esta clase me retorna una datatable llena, en este caso con dos columnas:</em></p>
<p><em>&#8216;Indico que el nombre de la columna cero, llenara el value del control:</em></p>
<p>CType(Ctrl, RadioButtonList).DataValueField = TBAux.Columns(0).ColumnName</p>
<p><em>&#8216;Indico que el nombre de la columna uno, llenara el text del control:</em></p>
<p>CType(Ctrl, RadioButtonList).DataTextField = TBAux.Columns(1).ColumnName</p>
<p><em>&#8216;Aca indico que el datasource de mi control se llenara con el contenido de la TBAux resultante del sql:</em></p>
<p>CType(Ctrl, RadioButtonList).DataSource = TBAux</p>
<p>End If</p>
<p>Case &#8220;CHK&#8221;</p>
<p>Ctrl = New CheckBoxList</p>
<p>Case &#8220;FIL&#8221;</p>
<p>Ctrl = New FileUpload</p>
<p>Case &#8220;CAL&#8221;</p>
<p><em>&#8216;Aquí implementare un control para fechas usando Ajax, específicamente el AjaxControlToolkit.CalendarExtender, pero creare un textbox que a la final será el control que contendrá la fecha, luego al AjaxCalendar le indicaremos que se vincule a este textbox y listo.</em></p>
<p>Ctrl = New TextBox <em>&#8216; Transmuto el Objeto CTRL a un asp: DropDownList</em></p>
<p><em>‘Luego creare el control calendar de Ajax</em><em> </em></p>
<p>Dim Cal As New AjaxControlToolkit.CalendarExtender()</p>
<p>Cal.FirstDayOfWeek = WebControls.FirstDayOfWeek.Sunday</p>
<p>Cal.Format = &#8220;dd/MM/yyyy&#8221;</p>
<p>Dim CalMask As New AjaxControlToolkit.MaskedEditExtender <em>&#8216; Este para indicarle que mascara contendrá nuestro control de fechas</em></p>
<p>CalMask.Mask = &#8220;99/99/9999&#8243;</p>
<p>CalMask.MessageValidatorTip = True</p>
<p>CalMask.OnFocusCssClass = &#8220;MaskedEditFocus&#8221;</p>
<p>CalMask.OnInvalidCssClass = &#8220;MaskedEditError&#8221;</p>
<p>CalMask.MaskType = AjaxControlToolkit.MaskedEditType.Date</p>
<p>CalMask.ClearMaskOnLostFocus = True</p>
<p>CalMask.InputDirection = AjaxControlToolkit.MaskedEditInputDirection.LeftToRight</p>
<p>CalMask.ErrorTooltipEnabled = True</p>
<p><em>&#8216;Aquí vinculo el resultado del uso del calendar al textbox, claro, poniendo el nombre del textbox:</em></p>
<p>Cal.TargetControlID = R(&#8220;IDControl&#8221;).ToString.ToLower.Trim</p>
<p><em>&#8216;Aquí vinculo la máscara del calendar al textbox:</em></p>
<p>CalMask.TargetControlID = R(&#8220;IDControl&#8221;).ToString.ToLower.Trim</p>
<p>Case &#8220;NEW&#8221;</p>
<p><em>&#8216;Este es un control de usuario propio para mostrar noticias, si están interesados en este control posteen y con gusto les indicare su implementación</em></p>
<p>Ctrl = New Control</p>
<p>Ctrl = LoadControl(&#8220;News.ascx&#8221;)</p>
<p>Case &#8220;LGI&#8221;</p>
<p><em>&#8216;Este es un control de usuario propio para solicitar login, si están interesados en este control posteen y con gusto les indicare su implementación</em></p>
<p>Ctrl = New Control</p>
<p>Ctrl = LoadControl(&#8220;Login.ascx&#8221;)</p>
<p>End Select</p>
<p><em>&#8216;Asigno un nombre único al control que asimismo lo tengo almacenado en la tabla:</em></p>
<p>Ctrl.Id = R(&#8220;IDControl&#8221;).ToString.ToLower.Trim</p>
<p><em>&#8216;Exijo que se construya el control con sus datos y características:</em></p>
<p>Ctrl.DataBind()</p>
<p><em>&#8216;Ahora incluiremos el control dentro de nuestra asp:Table que creamos antes de entrar en este bucle y que la llamamos TBContainer, entonces:</em></p>
<p><em>&#8216;como una asp:Table debe contener un TR o TableRow, y cada TR o TableRow debe contener uno o varios TD o TableCells entonces primero crearemos las TDs o TableCell para en ellas incluir nuestros controles, recuerden también que no se puede incluir un control dentro de un TR directamente asi que por ello:</em></p>
<p>Dim TR as new TableRow</p>
<p><em>&#8216;Ahora crearemos dos TDs o TableCells que las pondremos dentro de nuestra TR</em></p>
<p><em>&#8216;Crearemos dos TDs para que la primera contenga una referencia para el usuario al respecto de lo que deberá introducir sobre este control y la segunda TD que contendrá nuestro control, este control, así:</em></p>
<p>Dim TD1 as new TableCell</p>
<p><em>&#8216;Ponemos la descripción que queremos aparezca junto a nuestro control:</em><em> </em></p>
<p>TD1.text = R(&#8220;DescripcionControl&#8221;).ToString.ToLower.Trim</p>
<p>Dim TD2 as new TableCell</p>
<p><em>&#8216;Adicionamos el control al TD2</em><em> </em></p>
<p>TD2.controls.add(Ctrl)</p>
<p>TR.Cells.Add(TD1) <em>&#8216; Adicionamos el TD1 al TR</em></p>
<p>TR.Cells.Add(TD2) <em>&#8216; Adicionamos el TD1 al TR</em></p>
<p>TBContainer.Rows.Add(TR)  <em>&#8216; Adicionamos el TR a la asp:Table TBContainer</em></p>
<p><em>&#8216;Recuerden que estamos dentro de un bucle por lo tanto esto ocurrirá cuantas filas tenga nuestra TBDetails que a su vez serian los controles que deseamos</em></p>
<p><em>&#8216;Así se irán creando cada control y este se irá metiendo dentro de un nuevo TD y estos TDs metiendo dentro de un nuevo TR y este a su vez dentro de la asp:Table</em></p>
<p>Next <em>‘ Fin del Bucle</em></p>
<p><em>&#8216;Y finalmente adicionaremos nuestra TBContainer &#8220;asp:Table&#8221; dentro de nuestra TDCentral</em></p>
<p>Me.TDCEntral.controls.Add(TBContainer)</p>
<p><em>&#8216;Exigimos que se contruya la asp:Table  y Listo colegas.</em><em> </em></p>
<p>TBContainer.Databind()</p>
<p><em>A continuación el código sin mis comentarios:</em></p>
<p>Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load</p>
<p>Lion.DataRecovery(&#8220;select * from ws_smartpages_controls where menucode = &#8216; &#8221; &amp; Request.QueryString(&#8220;cdi&#8221;).ToString.Trim &amp; &#8221; &#8216; order by ControlOrder&#8221;, TBDetails)</p>
<p>Dim TBContainer as new Table</p>
<p>Foreach R as system.data.datarow in TBDetails.Rows  <em> </em></p>
<p>Dim Ctrl As Object<em> </em></p>
<p>Select Case R(&#8220;ControlType&#8221;).ToString.ToUpper.Trim.Substring(0, 3)</p>
<p>Case &#8220;LBL&#8221;</p>
<p>Ctrl = New Label &#8216; Transmuto el Objeto CTRL a un asp:Label</p>
<p>Case &#8220;TXT&#8221;</p>
<p>Ctrl = New TextBox  &#8216; Transmuto el Objeto CTRL a un asp:Textbox</p>
<p>Case &#8220;LON&#8221;</p>
<p>Ctrl = New TextBox  &#8216; Transmuto el Objeto CTRL a un asp:Textbox</p>
<p>CType(Ctrl, TextBox).TextMode = TextBoxMode.MultiLine</p>
<p>Case &#8220;PWD&#8221;</p>
<p>Ctrl = New TextBox</p>
<p>CType(Ctrl, TextBox).TextMode = TextBoxMode.Password <em> </em></p>
<p>Case &#8220;CMB&#8221;<em> </em></p>
<p>Ctrl = New DropDownList <em> </em></p>
<p>If R(&#8220;QueryControl&#8221;).ToString.ToLower.Trim &lt;&gt; &#8220;&#8221; And R(&#8220;QueryControl&#8221;).ToString.ToLower.Trim.Length &gt; 0 Then<em> </em></p>
<p>Dim TBAux as new system.data.datatable</p>
<p>Lion.DataRecovery(R(&#8220;QueryControl&#8221;).ToString.ToLower.Trim, TBAux)</p>
<p>CType(Ctrl, DropDownList).DataValueField = TBAux.Columns(0).ColumnName <em> </em></p>
<p>CType(Ctrl, DropDownList).DataTextField = TBAux.Columns(1).ColumnName</p>
<p>CType(Ctrl, DropDownList).DataSource = TBAux</p>
<p>End If</p>
<p>Case &#8220;OPT&#8221;</p>
<p>Ctrl = New RadioButtonList  <em> </em></p>
<p>If R(&#8220;QueryControl&#8221;).ToString.ToLower.Trim &lt;&gt; &#8220;&#8221; And R(&#8220;QueryControl&#8221;).ToString.ToLower.Trim.Length &gt; 0 Then <em> </em></p>
<p>Dim TBAux as new system.data.datatable</p>
<p>Lion.DataRecovery(R(&#8220;QueryControl&#8221;).ToString.ToLower.Trim, TBAux)</p>
<p>CType(Ctrl, RadioButtonList).DataValueField = TBAux.Columns(0).ColumnName</p>
<p>CType(Ctrl, RadioButtonList).DataTextField = TBAux.Columns(1).ColumnName</p>
<p>CType(Ctrl, RadioButtonList).DataSource = TBAux</p>
<p>End If</p>
<p>Case &#8220;CHK&#8221;</p>
<p>Ctrl = New CheckBoxList</p>
<p>Case &#8220;FIL&#8221;</p>
<p>Ctrl = New FileUpload</p>
<p>Case &#8220;CAL&#8221;</p>
<p>Ctrl = New TextBox</p>
<p>Dim Cal As New AjaxControlToolkit.CalendarExtender()</p>
<p>Cal.FirstDayOfWeek = WebControls.FirstDayOfWeek.Sunday</p>
<p>Cal.Format = &#8220;dd/MM/yyyy&#8221;</p>
<p>Dim CalMask As New AjaxControlToolkit.MaskedEditExtender <em> </em></p>
<p>CalMask.Mask = &#8220;99/99/9999&#8243;</p>
<p>CalMask.MessageValidatorTip = True</p>
<p>CalMask.OnFocusCssClass = &#8220;MaskedEditFocus&#8221;</p>
<p>CalMask.OnInvalidCssClass = &#8220;MaskedEditError&#8221;</p>
<p>CalMask.MaskType = AjaxControlToolkit.MaskedEditType.Date</p>
<p>CalMask.ClearMaskOnLostFocus = True</p>
<p>CalMask.InputDirection = AjaxControlToolkit.MaskedEditInputDirection.LeftToRight</p>
<p>CalMask.ErrorTooltipEnabled = True</p>
<p>Cal.TargetControlID = R(&#8220;IDControl&#8221;).ToString.ToLower.Trim</p>
<p>CalMask.TargetControlID = R(&#8220;IDControl&#8221;).ToString.ToLower.Trim</p>
<p>Case &#8220;NEW&#8221;</p>
<p>Ctrl = New Control</p>
<p>Ctrl = LoadControl(&#8220;News.ascx&#8221;)</p>
<p>Case &#8220;LGI&#8221;</p>
<p>Ctrl = New Control</p>
<p>Ctrl = LoadControl(&#8220;Login.ascx&#8221;)</p>
<p>End Select</p>
<p>Ctrl.Id = R(&#8220;IDControl&#8221;).ToString.ToLower.Trim</p>
<p>Ctrl.DataBind()<em> </em></p>
<p>Dim TR as new TableRow</p>
<p>Dim TD1 as new TableCell</p>
<p>TD1.text = R(&#8220;DescripcionControl&#8221;).ToString.ToLower.Trim</p>
<p>Dim TD2 as new TableCell</p>
<p>TD2.controls.add(Ctrl)</p>
<p>TR.Cells.Add(TD1)</p>
<p>TR.Cells.Add(TD2) <em> </em></p>
<p>TBContainer.Rows.Add(TR)</p>
<p>Next</p>
<p>Me.TDCEntral.controls.Add(TBContainer)</p>
<p>TBContainer.Databind()</p>
<p><em>El siguiente paso de este blog es hacer que estos controles dinámicos afecten una base de datos, o sea que inserten, actualicen o eliminen datos de una o más tablas, </em></p>
<p><em>Así podríamos hacer una página dinámica completa que administre una tabla de clientes, creamos los controles dinámicamente y estos guardan, modifican, o eliminan sus contenidos dentro de la tabla de clientes.</em></p>
<p><em>Como ven, esto nos da muchas posibilidades, por ejemplo, en la DataTable de la Base pueden adicionar mas campos que nos servirán de atributos de los controls, por ejemplo pueden crear campos que contengan el ancho y alto de los controles, o el número máximo de caracteres que un control puede aceptar y luego lo ligan al maxlength de los textbox, etc.. pueden también indicar qué clase de estilo tendrá cada control, etc, etc… las posibilidades son muchas, y luego pueden crear paginas completamente dinámicas, incluso esta página de creación de controles, podría dinámicamente administrarse a sí misma.</em></p>
<p><em>Tengo muchísimo más código que iré publicando en base a su acogida. Por ejemplo, para crear menús dinámicos, o buscadores de datos dinámicos y que sirven para buscar cualquier dato dentro de cualquier tabla o conjunto de tablas, así podríamos incluir este buscador como un control de usuario y adjuntarlo a nuestra página dinámica, imagínense, las posibilidades son muchas y de esta manera podrías crear paginas completamente dinámicas y desde tu mismo sitio Web sin tener que volver a publicar el sitio por cada cambio que te pidan tus jefes o clientes.</em></p>
<p><em>De mis sitios web tengo varios que están publicados en la red, los demás corren dentro de las intranet para las instituciones que he trabajado y que a su vez son completamente dinámicos, todo todo lo que ven esta dentro de una base de datos, y todo se construye dinámicamente, por ejemplo los menús superiores, los menús internos, las páginas de mantenimiento de tablas, las búsquedas, etc…</em></p>
<p><em>Si gustan pueden visitar:</em></p>
<p><em><a href="http://www.uninetbusiness.com" target="_blank">http://www.uninetbusiness.com</a></em></p>
<p><em><a href="http://www.coopalja.com.ec/">http://www.coopalja.com.ec</a></em></p>
<p><em><a href="http://www.totemdevelopers.com" target="_blank">http://www.totemdevelopers.com</a></em></p>
<p><em><a href="http://www.facoindustrias.com" target="_blank">http://www.facoindustrias.com</a></em></p>
<p><em><a href="http://www.facoindustrias.com" target="_blank">http://argudomorillo.martem.org</a></em></p>
<p><em>Si desean mas información, dudas, comentarios o sugerencias por favor posteen.  Y si alguien desea colaborar, muy amables, no me caería nada mal y muchas gracias.  Pueden usar paypal a la cuenta: fabricioleon@gmail.com</em></p>
<p><em>Gracias… totales</em></p>
<p><em>Un abrazo y </em></p>
<p><em>Good luck!!!</em></p>
<p><em><br />
</em></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/fabricioleon.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/fabricioleon.wordpress.com/4/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/fabricioleon.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/fabricioleon.wordpress.com/4/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/fabricioleon.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/fabricioleon.wordpress.com/4/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/fabricioleon.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/fabricioleon.wordpress.com/4/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/fabricioleon.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/fabricioleon.wordpress.com/4/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/fabricioleon.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/fabricioleon.wordpress.com/4/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/fabricioleon.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/fabricioleon.wordpress.com/4/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=fabricioleon.wordpress.com&amp;blog=14174403&amp;post=4&amp;subd=fabricioleon&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://fabricioleon.wordpress.com/2010/06/13/crear-controles-dinamicos-asp-net/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/7eacc063fd6725f9123214b617fa09c0?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">fabricioleon</media:title>
		</media:content>
	</item>
	</channel>
</rss>
