Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - piwi

#61
.NET (C#, VB.NET, ASP) / Re: Validaciones
12 Julio 2010, 12:18 PM
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?

#62
.NET (C#, VB.NET, ASP) / Re: Validaciones
10 Julio 2010, 16:13 PM
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
#63
.NET (C#, VB.NET, ASP) / Re: Validaciones
10 Julio 2010, 14:26 PM
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.
#64
.NET (C#, VB.NET, ASP) / Re: Validaciones
9 Julio 2010, 07:24 AM
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


#65
.NET (C#, VB.NET, ASP) / Re: Validaciones
9 Julio 2010, 07:21 AM
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.
#66
.NET (C#, VB.NET, ASP) / Re: Validaciones
8 Julio 2010, 18:00 PM
Hay un evento de preborrado?
Por los autonumericos simplemente me gusta tener control calculandolos
#67
.NET (C#, VB.NET, ASP) / Re: Validaciones
8 Julio 2010, 17:33 PM
Probare lo que me dices. En el evento de borrar quiero poner el mensaje si esta seguro pero no soy capaz de parar el borrado ya que el return no funciona y sigue hacia delante.
Lo de calcular el id por la base de datos se hace desde vb? No quiero utilizar los autonumericos
#68
.NET (C#, VB.NET, ASP) / Re: Validaciones
8 Julio 2010, 08:24 AM
Hola

Estoy haciendo pruebas de lo más sencillo y no encuentro la solución.

Estoy intentando mantener una tabla con dos campos:

idfabricante clave primaria no nula
d_fabricante

Para ello he creado un origne de datos de esta tabla y lo he arrastrado al formulario.

He codificado los siguientes eventos:

En este evento he añadido a mayores el chequeo del validate por si no pasa la validación que no siga con los cambios.

  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

Esto ha sido creado por vb al arrastrar el origen de datos.

   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)

   End Sub

Aquí compruebo si idfabricante está nulo

 Private Sub FABRICANTEDataGridView_CellValidating(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellValidatingEventArgs) Handles FABRICANTEDataGridView.CellValidating
         If FABRICANTEDataGridView.Columns(e.ColumnIndex).Name = "DataGridViewTextBoxColumn1" Then
           If e.FormattedValue IsNot Nothing AndAlso _
               String.IsNullOrEmpty(e.FormattedValue.ToString()) Then

               e.Cancel = True
           Else
               e.Cancel = False
           End If
       End If

   End Sub

En este he metido un mensaje de aviso por si dan a guardar o al nuevo en bindingnavigator

 Private Sub FABRICANTEDataGridView_DataError(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewDataErrorEventArgs) Handles FABRICANTEDataGridView.DataError
       MsgBox(e.Exception.Message)
       e.Cancel = True
   End Sub


Validación de la fila

 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("Error")
           e.Cancel = True
       Else
           e.Cancel = False


       End If
   End Sub

Los dos siguientes son de prueba pero me da error de nulo por lo que creo que no me inserta el valor

   Private Sub FABRICANTEDataGridView_RowLeave(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles FABRICANTEDataGridView.RowLeave
       If FABRICANTEDataGridView(0, e.RowIndex).Value Is DBNull.Value Then
           FABRICANTEDataGridView(0, e.RowIndex).Value = UltimoCodigo()
       End If

   End Sub

   Private Sub FABRICANTEDataGridView_RowValidated(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles FABRICANTEDataGridView.RowValidated
       If String.IsNullOrEmpty(FABRICANTEDataGridView(0, e.RowIndex).Value) Then
           FABRICANTEDataGridView(0, e.RowIndex).Value = UltimoCodigo()
       End If
   End Sub

Función que me retorna el último id

 Private Function UltimoCodigo() As Integer

       Dim Conexion As New SqlConnection("Data Source=192.168.1.100;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)

        li_ultimo = Datos.Tables(0).Rows(0).Item(0)

        li_ultimo = li_ultimo + 1

        Conexion.Close()

        Return li_ultimo

   End Function


Con esto no me funciona, donde tengo que asignar el valor al idfabricante para que lo tenga antes de que cambie de fila o que de al boton guardar?
#69
.NET (C#, VB.NET, ASP) / Re: Validaciones
7 Julio 2010, 21:28 PM
En el momento de dar al nuevo registro en bindingdourcenavigation, quiero meter en la celda un valor pero no se en que evento lo tengo que hacer porque no se seleccionar bien la nueva fila del datagridview
#70
.NET (C#, VB.NET, ASP) / Re: Validaciones
7 Julio 2010, 16:18 PM
Los eventos que estoy utilizando para validar los datos son cellvalidating con el e.cances y dataerror también con su e.cancel correspondiente.

A mi me gusta tambén más  utilizar en vez de datagrid, campos simples o como se diga (en origen de datos poner modo detalle) pero tengo problemas con un campo que le he dicho que es de tipo combobox.

Ahora estoy intentando averigual como puedo insertar el código (un numerico) pero quiero hacerlo yo y no que sea autoincremental.

Con el problema con el que me encuentro que no soy capaz de capturar  la linea insertada ya que el evento se lanza antes de insertar la línea y es donde lo capturo por lo que siempre me devuelve row 0