none
DataGridViewTextBoxColumn Customizada para Doubles RRS feed

  • Pregunta

  • buenas tardes, estoy creando una clase para una celda que acepte solo decimales pero no logro terminarlo

        Inherits DataGridViewTextBoxEditingControl
    
        Private separadorDecimal As String = Globalization.CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator
    
        Protected Overrides Sub OnKeyDown(e As System.Windows.Forms.KeyEventArgs)
    
            Dim AllowedKeys() As Keys = {Keys.Back, Keys.Delete, Keys.Left, Keys.Right, Keys.Home, Keys.End}
    
            If Not Char.IsDigit(ChrW(e.KeyCode)) And Not AllowedKeys.Contains(e.KeyCode) Or
                (ChrW(e.KeyCode) = separadorDecimal And InStr(Text, separadorDecimal) > 0) Then
    
                e.SuppressKeyPress = True
            End If
        End Sub
    
        Protected Overrides Sub OnTextChanged(e As System.EventArgs)
    
            If Not Char.IsDigit(Text) Then
                Clear()
            End If
    
            MyBase.OnTextChanged(e)
        End Sub
    
    End Class

    De esa manera me acepta solo enteros y necesito decimales

    alguna idea? muchas gracias


    • Editado JoniJeJ sábado, 24 de febrero de 2018 17:19
    • Cambiado Enrique M. Montejo miércoles, 28 de febrero de 2018 16:13 Pregunta relacionada con objetos de Windows Forms.
    sábado, 24 de febrero de 2018 17:19

Todas las respuestas

  • Hola:
    En un Form con 1 DataGridView, copia el siguiente código

    Option Explicit On
    Option Strict On
    Imports System.Data.SqlClient

    Public Class Form1

        Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
            Try
                Dim lsCadConexion As String = "Data Source=.\SQLEXPRESS;Initial Catalog=NorthWind;Integrated Security=True"
                Dim lsQuery As String = "Select OrderID, OrderDate, Freight, ShipCountry From Orders Where Employeeid=1"
                Using loConexion As New SqlConnection(lsCadConexion)
                    Dim loDataAdapter As New SqlDataAdapter(lsQuery, loConexion)
                    Dim loDataTable As New DataTable
                    loDataAdapter.Fill(loDataTable)
                    '
                    Me.dgvGrid.DataSource = loDataTable
                End Using
            Catch ex As Exception
                MessageBox.Show(ex.Message, "Load", MessageBoxButtons.OK, MessageBoxIcon.Information)
            End Try
            ' crear un estilo para cada tipo de dato de las columnas del grid
            Dim styTexto As New DataGridViewCellStyle()
            styTexto.BackColor = Color.SeaShell
            styTexto.ForeColor = Color.DarkMagenta
            styTexto.SelectionBackColor = Color.Lime
            styTexto.SelectionForeColor = Color.MediumBlue
            styTexto.Alignment = DataGridViewContentAlignment.TopCenter
            styTexto.Font = New Font("Century Gothic", 10, FontStyle.Italic Or FontStyle.Bold)
            styTexto.WrapMode = DataGridViewTriState.[True]
            '
            Dim styFecha As New DataGridViewCellStyle()
            styFecha.BackColor = Color.LightYellow
            styFecha.ForeColor = Color.Olive
            styFecha.SelectionBackColor = Color.Lime
            styFecha.SelectionForeColor = Color.MediumBlue
            styFecha.Format = "dddd, dd \de MMMM \de yyyy"
            styFecha.NullValue = "SIN FECHA"
            '
            Dim styInt As New DataGridViewCellStyle()
            styInt.BackColor = Color.PowderBlue
            styInt.ForeColor = Color.Navy
            styInt.SelectionBackColor = Color.Lime
            styInt.SelectionForeColor = Color.MediumBlue
            styInt.Alignment = DataGridViewContentAlignment.MiddleRight
            '
            Dim styDec As New DataGridViewCellStyle()
            styDec.BackColor = Color.SandyBrown
            styDec.ForeColor = Color.DarkBlue
            styDec.SelectionBackColor = Color.Lime
            styDec.SelectionForeColor = Color.MediumBlue
            styDec.Alignment = DataGridViewContentAlignment.MiddleRight
            styDec.Format = "#,#.#0"
            ' recorrer la colección de columnas, en función del tipo de dato, asignar un estilo
            For Each dgvcColumna As DataGridViewColumn In Me.dgvGrid.Columns
                If dgvcColumna.ValueType Is GetType(String) Then
                    dgvcColumna.DefaultCellStyle = styTexto
                End If
                '
                If dgvcColumna.ValueType Is GetType(DateTime) Then
                    dgvcColumna.DefaultCellStyle = styFecha
                End If
                '
                If dgvcColumna.ValueType Is GetType(Integer) Then
                    dgvcColumna.DefaultCellStyle = styInt
                End If
                '
                If dgvcColumna.ValueType Is GetType(Decimal) Then
                    dgvcColumna.DefaultCellStyle = styDec
                End If
            Next
            ' ajustar automáticamente el tamaño de las filas
            Me.dgvGrid.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCellsExceptHeaders
            Me.WindowState = FormWindowState.Maximized
        End Sub
    End Class

    Un saludo desde Bilbo
    Carlos

    domingo, 25 de febrero de 2018 1:24
  • Buenas, gracias por responder pero no me ayuda con mi problema, necesito crear una columna o celda (DataGridViewColumn DataGridViewCell) customizada que acepte solo numeros con decimales, para propagarlo por todo un sistema
    domingo, 25 de febrero de 2018 4:24