none
Control de Usuario con formato numérico en un gridview en tiempo de ejecución. RRS feed

  • Debate general

  • Tengo lo siguiente que he retomado de alguna página en internet:

    ********* Control de usuario *****

             

    <%@ Control Language="VB" AutoEventWireup="false" CodeFile="ValNum.ascx.vb" Inherits="Control_ValNum" %>
    <asp:TextBox ID="TextBValNum" runat="server"></asp:TextBox>
    <ajaxToolkit:MaskedEditExtender ID="MaskedEditExtender1" runat="server" 
            Mask="9.99" MaskType="Number"
            TargetControlID="TextBValNum"
            AcceptNegative = "Left"
            ClearMaskOnLostFocus = "true"
            ErrorTooltipEnabled = "True"
            MessageValidatorTip="true"
            OnFocusCssClass="MaskedEditFocus"
            OnInvalidCssClass="MaskedEditError"

        />

      <ajaxToolkit:MaskedEditValidator ID="MaskedEditValidator1" runat="server" 
        ControlToValidate="TextBValNum" ControlExtender="MaskedEditExtender1" 
        Display="Dynamic" ValidationGroup="MKE"  >
       </ajaxToolkit:MaskedEditValidator>

    <asp:RangeValidator ID="RangeValidator1" runat="server" 
        ControlToValidate="TextBValNum" Display="Dynamic" ErrorMessage="RangeValidator" 
        MaximumValue="5" MinimumValue="1" Type="Currency" ValidationGroup="MKE"></asp:RangeValidator>

    ******* 

    *****Clase 

    Public Class GridViewHeaderTemplate
        Implements ITemplate
        Private text As String

        Public Sub New(ByVal text As String)
            Me.text = text
        End Sub

        Public Sub InstantiateIn(ByVal container As System.Web.UI.Control) Implements ITemplate.InstantiateIn
            Dim lc As New Literal()
            lc.Text = text

            container.Controls.Add(lc)

        End Sub
    End Class

    ********

    Public Class GridViewItemTextPerITemplate
        Implements ITemplate
        Private m_columnName As String
        Public Sub New(ByVal columnName As String)
            Me.columnName = columnName
        End Sub
        Public Property columnName() As String
            Get
                Return m_columnName
            End Get
            Set(ByVal value As String)
                m_columnName = value
            End Set
        End Property
        Public Sub InstantiateIn(ByVal container As System.Web.UI.Control) Implements ITemplate.InstantiateIn
            'Dim Text As New TextBox
            Dim control_Text As New Control_ValNum()
            control_Text.LoadControl("~/Control/ValNum.ascx")
            control_Text.ID = String.Format("TxtN{0}", columnName)
            control_Text.EnableViewState = True
            AddHandler control_Text.DataBinding, New EventHandler(AddressOf control_Text_DataBinding)
            container.Controls.Add(control_Text)
        End Sub
        Private Sub control_Text_DataBinding(ByVal sender As Object, ByVal e As EventArgs)
            Dim t1 As Control_ValNum = DirectCast(sender, Control_ValNum)
            t1.LoadControl("~/Control/ValNum.ascx")
            Dim row As GridViewRow = DirectCast(t1.NamingContainer, GridViewRow)
            Dim value As String = DataBinder.Eval(row.DataItem, columnName).ToString()
        End Sub
    End Class

    *********

    Creación de columnas en el gridview:

    Dim BTempateGrid As New TemplateField()
    BTempateGrid.HeaderTemplate = New GridViewHeaderTemplate("Título del Campo")

    GridViewHeaderTemplate funciona bien y sin ningún problema.

    Necesito: aplicar formato numérico con dos decimales y un rango entre 1 y 5 en tiempo de ejecución. En internet encontré este ejemplo y no se como realizar el llamado a clase para modificar el contenido ya existente y también crear un nuevo dato utilizando la clase GridViewItemTextPerITemplate.

    Si lo anterior lo realizo con un TextBox, funciona bien, pero necesito la utilización de los formatos decimales y el rango para la captura de datos.

    Gracias por la ayuda que me puedan dar.

    jueves, 6 de julio de 2017 5:05