none
Verificar duplicado de codigo en columna de un datagrid.

    Pregunta

  • Hola a todos.

    He intentado varios código que no me funcionan.

    Tengo un DataGrid con estas columnas : Código,Descripción,Precio

    Como puedo hacer para que cuando escriba el código en la columna correspondiente y presionar ENTER, me de un mensaje en caso de que ya ese código este registrado en otra celda de la misma columna?

    Y cual seria la mejor forma de código para que se acepte mediante lector de código de barras.

    Gracias.

    sábado, 17 de septiembre de 2016 15:02

Respuestas

  • Formulaz5,

    ¿DataGrid o DataGridView?. Ambas clases son distintas, por tu historial de preguntas imagino que te refieres a la clase DataGridView. En cualquier caso el procedimiento es el mismo, recorrer las celdas de la columna (menos la celda actual) para detectar un valor igual al escrito en la celda actual (dicho procedimiento lo puedes realizar en el evento CellValidating):

    Private Sub DataGridView1_CellValidating(sender As Object, e As DataGridViewCellValidatingEventArgs)
    	If Not String.IsNullOrEmpty(e.FormattedValue.ToString()) Then
    		Dim valorExiste As Boolean =
    			DataGridView1.Rows.Cast(Of DataGridViewRow)().
    			Any(Function(r) Convert.ToString(r.Cells(0).Value) = e.FormattedValue.ToString() _
    						AndAlso r.Index <> e.RowIndex)
    
    		DataGridView1.Rows(e.RowIndex).ErrorText = If(valorExiste, "Valor duplicado", [String].Empty)
    
    		e.Cancel = valorExiste
    	End If
    End Sub


    {?}- Y cual seria la mejor forma de código para que se acepte mediante lector de código de barras.

    Un lector de código de barra es un dispositivo de Data Entry, nada distinto a como lo es un teclado.


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.

    sábado, 17 de septiembre de 2016 16:13

Todas las respuestas

  • Formulaz5,

    ¿DataGrid o DataGridView?. Ambas clases son distintas, por tu historial de preguntas imagino que te refieres a la clase DataGridView. En cualquier caso el procedimiento es el mismo, recorrer las celdas de la columna (menos la celda actual) para detectar un valor igual al escrito en la celda actual (dicho procedimiento lo puedes realizar en el evento CellValidating):

    Private Sub DataGridView1_CellValidating(sender As Object, e As DataGridViewCellValidatingEventArgs)
    	If Not String.IsNullOrEmpty(e.FormattedValue.ToString()) Then
    		Dim valorExiste As Boolean =
    			DataGridView1.Rows.Cast(Of DataGridViewRow)().
    			Any(Function(r) Convert.ToString(r.Cells(0).Value) = e.FormattedValue.ToString() _
    						AndAlso r.Index <> e.RowIndex)
    
    		DataGridView1.Rows(e.RowIndex).ErrorText = If(valorExiste, "Valor duplicado", [String].Empty)
    
    		e.Cancel = valorExiste
    	End If
    End Sub


    {?}- Y cual seria la mejor forma de código para que se acepte mediante lector de código de barras.

    Un lector de código de barra es un dispositivo de Data Entry, nada distinto a como lo es un teclado.


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.

    sábado, 17 de septiembre de 2016 16:13
  • Gracias Williams.

    Lo único que no me funciono fue el mensaje que no esta, pero paraliza todo hasta que no se cambia el valor duplicado.

    Y en cuanto a la ultima pregunta, lo hice debido a que en mi vieja plataforma había un truco de poner asteriscos en ambos lados del código para que el lector pudiera leerlos y, como es primera vez que desarrollo una aplicación  de esta naturaleza en esta plataforma, me cerciore.

    Gracias de nuevo.

    sábado, 17 de septiembre de 2016 19:45
  • Formulaz5,

    Considera que el mensaje que se muestra emerge únicamente cuando colocas el puntero del mouse sobre el icono de advertencia (icono de color rojo), en caso lo desees podrías cambiarlo por un mensaje de ventana (MessageBox.Show).

    Respecto al lector de código de barras, reitero, es un dispositivo de lectura de datos que convierte la representación del código de barra en código de lectura, no tiene nada de especial, sin embargo podrías encontrar ciertas particularidades según el modelo del dispositivo que deberías entender (o solucionar) leyendo el manual.


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    sábado, 17 de septiembre de 2016 21:10