Validaciones

Iniciado por piwi, 5 Julio 2010, 20:58 PM

0 Miembros y 1 Visitante están viendo este tema.

piwi

Hay un evento de preborrado?
Por los autonumericos simplemente me gusta tener control calculandolos

[D4N93R]

Más bien pierdes control, Que ganas teniendo "control" sobre el ID? nada..

CitarHay un evento de preborrado?
Se llama boton de borrar :P Ahi haces la validación xD

piwi

En mi caso necesito dar un id por tipo que es otro campo por lo que la clave sería id m
Cita de: D4N93R en  8 Julio 2010, 18:37 PM
Más bien pierdes control, Que ganas teniendo "control" sobre el ID? nada..

En mi caso la clave la forman dos campos, un id y un tipo por lo que tengo que calcular el id dependiendo del tipo.

CitarHay un evento de preborrado?
Se llama boton de borrar :P Ahi haces la validación xD

El botón que utilizo es BindingNavigatorDeleteItem_Click pero ahí ya no puedo hacer nada. Me extraña que no puedan insertar una validación cuando utilizar un bindingnavigator. Quizá hay que sobreescribir el evento y en caso que digan que quieren borrar entonces llamarlo.

piwi

#23
Creo que con esto ya he conseguido realizar un modelo para un mantenimiento de una tabla. También tengo contemplado preguntar si se quiere borrar un registro por si alguien no sabe como hacerlo. Quizá todos los sabeís pero por si acaso aquí está.

Si alguien ve algo que no está correcto se lo agradecería

Código (vb) [Seleccionar]

Imports System.Data.SqlClient

Public Class Form1

    Private BotonBorrar As ToolStripItem


    Private Sub FABRICANTEBindingNavigatorSaveItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles FABRICANTEBindingNavigatorSaveItem.Click
        Dim li_retorno As Integer

        li_retorno = Me.Validate()

        If li_retorno = -1 Then
            Me.FABRICANTEBindingSource.EndEdit()
            Me.TableAdapterManager.UpdateAll(Me.FabricanteDataSet)
        End If

    End Sub

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        'TODO: esta línea de código carga datos en la tabla 'FabricanteDataSet.FABRICANTE' Puede moverla o quitarla según sea necesario.
        Me.FABRICANTETableAdapter.Fill(Me.FabricanteDataSet.FABRICANTE)

        Me.BotonBorrar = FABRICANTEBindingNavigator.DeleteItem

    End Sub

    Private Sub FABRICANTEDataGridView_CellBeginEdit(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellCancelEventArgs) Handles FABRICANTEDataGridView.CellBeginEdit
        If FABRICANTEDataGridView(1, e.RowIndex).Value Is DBNull.Value Then
            FABRICANTEDataGridView(1, e.RowIndex).Value = UltimoCodigo()
        End If
    End Sub

    Private Sub FABRICANTEDataGridView_DataError(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewDataErrorEventArgs) Handles FABRICANTEDataGridView.DataError
        MsgBox(e.Exception.Message, MsgBoxStyle.Exclamation, "Fabricantes")
    End Sub

    Private Sub FABRICANTEDataGridView_RowValidated(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles FABRICANTEDataGridView.RowValidated
        Me.TableAdapterManager.UpdateAll(Me.FabricanteDataSet)
    End Sub

    Private Sub FABRICANTEDataGridView_RowValidating(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellCancelEventArgs) Handles FABRICANTEDataGridView.RowValidating
        If FABRICANTEDataGridView(0, e.RowIndex).Value Is DBNull.Value Then
            MsgBox("Debe introducir el fabricante", MsgBoxStyle.Exclamation, "Fabricantes")
            e.Cancel = True
        Else
            e.Cancel = False
        End If
    End Sub

    Private Function UltimoCodigo() As Integer

        Dim Conexion As New SqlConnection("Data Source=192.168.1.1;Initial Catalog=PRUEBAS;user id = piwi; password = piwi;")
        Dim Datos As New DataSet

        Dim li_ultimo As Integer

        Conexion.Open()

        Dim Adaptador As New SqlDataAdapter("SELECT MAX(IDFABRICANTE) FROM FABRICANTE", Conexion)

        Adaptador.Fill(Datos)

        If Datos.Tables(0).Rows(0).Item(0) Is DBNull.Value Then
            li_ultimo = 0
        Else
            li_ultimo = Datos.Tables(0).Rows(0).Item(0)
        End If

        li_ultimo = li_ultimo + 1

        Conexion.Close()

        Return li_ultimo

    End Function

    Private Sub FABRICANTEBindingNavigator_ItemClicked(ByVal sender As Object, ByVal e As System.Windows.Forms.ToolStripItemClickedEventArgs) Handles FABRICANTEBindingNavigator.ItemClicked
        If e.ClickedItem Is Me.BotonBorrar Then
            If MessageBox.Show("Está seguro de querer borrar el registro?", "Fabricantes", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) = Windows.Forms.DialogResult.Yes Then
                Me.FABRICANTEBindingNavigator.DeleteItem = Me.BotonBorrar
            Else
                Me.FABRICANTEBindingNavigator.DeleteItem = Nothing
            End If
        End If

    End Sub

End Class



[D4N93R]

Buenísimo, que bueno que resolviste el problema, saludos!

piwi

Ahora me encuentro con otro problema. Tengo dos combobox dentro del datagrid enlazados a datos. Como hago para filtrar el contenido del segundo dependiendo de lo que me seleccionen en el primero?

Un saludo.

[D4N93R]

Una pregunta para poder contestarte, estás queriendo filtrar los resultados con el Combo Box?

piwi

Si, tengo un combo con fabricantes y otro con productos al seleccionar un fabricante, solamente mostrar los productos de este.

Fabricantes: idfabricante, fabricante
Productos idproducto(pk), idfabricante, producto

[D4N93R]

#28
Suscríbete al evento TextChanged o SelectedItemChanged del ComboBox y en ese método setteas
la propiedad Filter del bindingSource apropiadamente.

EDIT:

Ok, es fácil, xD tiempo sin usarlo!! Simplemente en el bindingSource, espero que estés usando uno, en el TextChange o en el SelectedItemChanged modifica la propiedad Filter con el filtro apropiado, como:

Código (csharp) [Seleccionar]

bindingSource.Filter = "columna = '"+variableDelComboBox+"'";


Espero te sirva!

Saludos!

piwi

Gracias. Ya me filtra. El problema que tengo es cuando cambio el primer combo, como asigno un nulo al segundo para que se borre la selección anterior?