martes, 6 de marzo de 2012

Agregar filas nuevas con código

 Dim i As Integer
        If DataTable1DataGridView.Rows.Count > 0 Then
            For i = 0 To DataTable1DataGridView.Rows.Count - 2
                Dim nuevafila As DataRow = SuperDataSet.Tables("DetallesPedido").NewRow
                nuevafila.Item("IdPedido") = DataTable1DataGridView.Rows(i).Cells(0).Value
                nuevafila.Item("IdProducto") = DataTable1DataGridView.Rows(i).Cells(1).Value
                nuevafila.Item("Cantidad") = DataTable1DataGridView.Rows(i).Cells(3).Value

                SuperDataSet.Tables("DetallesPedido").Rows.Add(nuevafila)
            Next

        End If

Calcular datos dentro de celdas

 Private Sub DataTable1DataGridView_CellEndEdit(sender As System.Object, e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataTable1DataGridView.CellEndEdit
        If e.ColumnIndex = 3 Then
            DataTable1DataGridView.CurrentRow.Cells(4).Value = DataTable1DataGridView.CurrentRow.Cells(2).Value * DataTable1DataGridView.CurrentRow.Cells(3).Value
        End If
    End Sub

Encontrar e insertar un dato en un datagridview después de dejar una celda

    Private Sub DataTable1DataGridView_CellLeave(sender As System.Object, e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataTable1DataGridView.CellLeave
        If e.ColumnIndex = 1 Then
            Dim fila As Integer = ProductosBindingSource.Find("NombreProducto", DataTable1DataGridView.CurrentCell.EditedFormattedValue)

            ProductosBindingSource.Position = fila
            DataTable1DataGridView.CurrentRow.Cells(2).Value = SuperDataSet.Tables("Productos").Rows(fila).Item("Precio")
        End If
    End Sub

Primero se le asigna a fila la posición de esa fila en la tabla de donde queremos coger el dato
Luego asignamos a la celda (en este caso la 2 es precio) el valor de la tabla productos de la fila (fila que es el indice que hemos cogido antes) y de la fila la propiedad llamada precio, con lo cual cogerá el precio del nombre de producto que hemos seleccionado en la tabla origen

Filtro entre fechas y ordenado por un campo

 DataView1.Table = SuperDataSet.Tables("Pedidos")
        DataView1.RowFilter = "FechaPedido >='" & CDate(TextBox1.Text) & "' and Fechapedido <='" & CDate(TextBox2.Text) & "'"
        DataView1.Sort = "IdEmpleado"
        PedidosDataGridView.DataSource = DataView1

hay que convertir los .text en fecha

Filtrar datos con el dataview

 DataView1.Table = SuperDataSet.Tables("Compras")
        DataView1.RowFilter = "Recibido=False"
        ComprasDataGridView.DataSource = DataView1

Acuerdate de agregar el componente dataview al cuadro de herramientas de datos

Mostrar otro campo en un combobox con una tabla relacionada

En las propiedades en databindings

SelectedValue será el campo original de la tabla presente

Text será el campo que queramos relacionar (si tenemos un id, y preferimos que se vea el campo nombre)

DataSource la otra tabla, la original del dato que queremos mostrar (la que no está presente en el formulario)

Displaymember, elegimos el campo que queremos mostrar (aquí es mas fácil porqué nos mostrara solo los campos de la tabla datasource escogida)

Valuemember, el campo clave, el que tiene que ir relacionado con el selectedvalue de la otra tabla (también es "fácil" porque nos mostrará solo los campos de la tabla datasource)

Hacer una búsqueda de un registro

   Dim posicion As Integer
        posicion = ClientesBindingSource.Find(ToolStripComboBox1.SelectedItem.ToString, ToolStripTextBox1.Text)

        If posicion <> -1 Then
            ClientesBindingSource.Position = posicion
        Else
            MessageBox.Show("Ese cliente no existe")
        End If

Cargando los nombres de los campos de una tabla en un combobox

 For i = 0 To SuperDataSet.Clientes.Count - 1
            ToolStripComboBox1.Items.Add(SuperDataSet.Clientes.Columns.Item(i))
        Next

domingo, 4 de marzo de 2012

Gestión de errores --- Try Catch

  Try
            EmpleadoBindingSource.EndEdit()
            OleDbDataAdapter1.Update(DataSet11, "Empleado")

        Catch ex As OleDb.OleDbException
            MessageBox.Show(ex.Message.ToString)

        Catch ex As ConstraintException
            MessageBox.Show(ex.Message.ToString)

        Catch ex As NoNullAllowedException
            MessageBox.Show(ex.Message.ToString)

        Catch ex As Exception
            MessageBox.Show(ex.Message.ToString)
        End Try

sábado, 3 de marzo de 2012

Otra forma de moverse entre datos y datagridviews

Si no podemos navegar entre los datagridviews con el control bindingsource (bindingsource1.movenext())

tenemos este otro sistema


 Private Sub bprimero_Click(sender As System.Object, e As System.EventArgs) Handles bprimero.Click
        DataGridView1.CurrentCell = DataGridView1(0, 0)
        Label1.Text = "Registro " & DataGridView1.CurrentCell.RowIndex + 1 & " de " & DataGridView1.Rows.Count
    End Sub

    Private Sub banterior_Click(sender As System.Object, e As System.EventArgs) Handles banterior.Click
        DataGridView1.CurrentCell = DataGridView1(0, DataGridView1.CurrentCell.RowIndex - 1)
        Label1.Text = "Registro " & DataGridView1.CurrentCell.RowIndex + 1 & " de " & DataGridView1.Rows.Count
    End Sub

    Private Sub bsiguiente_Click(sender As System.Object, e As System.EventArgs) Handles bsiguiente.Click
        DataGridView1.CurrentCell = DataGridView1(0, DataGridView1.CurrentCell.RowIndex + 1)
        Label1.Text = "Registro " & DataGridView1.CurrentCell.RowIndex + 1 & " de " & DataGridView1.Rows.Count
    End Sub

    Private Sub bultimo_Click(sender As System.Object, e As System.EventArgs) Handles bultimo.Click
        DataGridView1.CurrentCell = DataGridView1(0, DataGridView1.Rows.Count - 1)
        Label1.Text = "Registro " & DataGridView1.CurrentCell.RowIndex + 1 & " de " & DataGridView1.Rows.Count
    End Sub

viernes, 2 de marzo de 2012

Crear relación maestro detalle

 Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        OleDbDataAdapter1.Fill(DataSet11, "Tipo De Producto")
        OleDbDataAdapter2.Fill(DataSet11, "Producto")

        DataSet11.Relations.Add("Relacionproductos", DataSet11.Tables("Tipo de producto").Columns("Product type ID"), DataSet11.Tables("Producto").Columns("ID del tipo de producto"))

        Me.DataGridView1.DataSource = DataSet11
        Me.DataGridView1.DataMember = "Tipo de producto"

        Me.DataGridView2.DataSource = DataSet11
        Me.DataGridView2.DataMember = "Tipo de producto.Relacionproductos"

    End Sub


después de cargar los dataadapters, creo una relación, cogiendo tipo de producto como tabla maestra y producto como la tabla detalle, relacionándolas por el registro en común, después al primer datagridview le pongo de datasource el dataset11 y de datamember la tabla tipo de producto, y para el datagridview2 el datamember cambia a ser el de tipo de producto.relacionproductos siendo relacionproductos la relación que acabamos de crear