none
DataGridView.. RRS feed

  • Pregunta

  • En un DataGridView(Clientes) tengo el campo IdCliente, y en otro DataGridView(Ventas), tengo el mismo campo de IdCliente, lo que quiero hacer es que al seleccionar un cliente del DataGridView de Clientes, en el otro DataGridView de ventas se visualicen solo las ventas de ese cliente y así con cada cliente, cabe mencionar que ambos DataGridView están en el mismo formulario y estoy usando el metodo SelectionChanged, asi si selecciono una celda (o fila mejor dicho) entonces en el DataGridView de ventas se agrupan todas las ventas de ese cliente... ¿me pueden ayudar explicándome como poder hacerlo por favor?, estoy utilizando un DataSet, lo estoy realizando en Visual Basic de Visual Studio .NET

    Gracias.

    miércoles, 22 de mayo de 2019 22:53

Respuestas

  • Hola:
    En un Form con 2 DataGridView, copia y pega el siguiente codigo
    Option Explicit On
    Option Strict On
    Imports System.Data.SqlClient
    Public Class Form3
        Private Sub Form3_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
            Dim msCadenaSQL As String = "Data Source=.\SQLEXPRESS;Initial Catalog=Northwind;Integrated Security=True"
            Dim mDataSet As DataSet
            Try
                ' Configuramos una conexión con el origen de datos.
                Using loConexion As New SqlConnection(msCadenaSQL)
                    ' crear adaptadores
                    Dim daCustomers As New SqlDataAdapter("SELECT * FROM Customers", loConexion)
                    Dim daOrders As New SqlDataAdapter("SELECT * FROM Orders", loConexion)
                    ' instanciar dataset
                    mDataSet = New DataSet()
                    ' utilizar los dataadapters para llenar el dataset con las 2 tablas
                    daCustomers.Fill(mDataSet, "Customers")
                    daOrders.Fill(mDataSet, "Orders")
                    ' relacionar las dos tablas del dataset por campo común
                    mDataSet.Relations.Add("Customers_Orders", mDataSet.Tables("Customers").Columns("CustomerID"), mDataSet.Tables("Orders").Columns("CustomerID"))
                    ' asignar al datagrid maestro la tabla Customers
                    Me.dgvMaestro.DataSource = mDataSet
                    Me.dgvMaestro.DataMember = "Customers"
                    ' asignar al datagrid detalles la relación que acabamos de crear por código
                    Me.dgvDetalle.DataSource = mDataSet
                    Me.dgvDetalle.DataMember = "Customers.Customers_Orders"
                End Using
            Catch ex As Exception
                MessageBox.Show(ex.Message)
            End Try
        End Sub

        Private Sub dgvMaestro_CellPainting(sender As Object, e As System.Windows.Forms.DataGridViewCellPaintingEventArgs) Handles dgvMaestro.CellPainting
            Try
                If e.RowIndex <> -1 Then
                    Using gridBrushb As Brush = New SolidBrush(Color.Blue), gridBrush As Brush = New SolidBrush(Me.dgvMaestro.GridColor), backColorBrushb As Brush = New SolidBrush(e.CellStyle.BackColor)
                        Using gridLinePen As Pen = New Pen(gridBrushb, 2), gridLinePen2 As Pen = New Pen(gridBrush)
                            e.Graphics.FillRectangle(backColorBrushb, e.CellBounds)
                            '
                            If e.RowIndex < dgvMaestro.Rows.Count - 2 AndAlso dgvMaestro.Item(0, e.RowIndex + 1).Value Is dgvMaestro.Item(0, e.RowIndex).Value Then
                                e.Graphics.DrawLine(gridLinePen2, e.CellBounds.Left, e.CellBounds.Bottom - 1, e.CellBounds.Right - 1, e.CellBounds.Bottom - 1)
                            Else
                                e.Graphics.DrawLine(gridLinePen, e.CellBounds.Left, e.CellBounds.Bottom - 1, e.CellBounds.Right - 1, e.CellBounds.Bottom - 1)
                            End If
                            '
                            e.Graphics.DrawLine(gridLinePen2, e.CellBounds.Right - 1, e.CellBounds.Top, e.CellBounds.Right - 1, e.CellBounds.Bottom)
                            e.Graphics.DrawString(CType(IIf(e.Value Is DBNull.Value, "", e.Value), String), e.CellStyle.Font, Brushes.Black, e.CellBounds.X + 2, e.CellBounds.Y + 5, StringFormat.GenericDefault)
                            '
                            e.Handled = True
                        End Using
                    End Using
                End If
            Catch ex As Exception
                MessageBox.Show(ex.Message)
            End Try
        End Sub
    End Class

    P.D.
    El resultado es la siguiente imagen

    Un saludo desde Bilbo
    Carlos

    jueves, 23 de mayo de 2019 6:07

Todas las respuestas

  • Hola:
    En un Form con 2 DataGridView, copia y pega el siguiente codigo
    Option Explicit On
    Option Strict On
    Imports System.Data.SqlClient
    Public Class Form3
        Private Sub Form3_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
            Dim msCadenaSQL As String = "Data Source=.\SQLEXPRESS;Initial Catalog=Northwind;Integrated Security=True"
            Dim mDataSet As DataSet
            Try
                ' Configuramos una conexión con el origen de datos.
                Using loConexion As New SqlConnection(msCadenaSQL)
                    ' crear adaptadores
                    Dim daCustomers As New SqlDataAdapter("SELECT * FROM Customers", loConexion)
                    Dim daOrders As New SqlDataAdapter("SELECT * FROM Orders", loConexion)
                    ' instanciar dataset
                    mDataSet = New DataSet()
                    ' utilizar los dataadapters para llenar el dataset con las 2 tablas
                    daCustomers.Fill(mDataSet, "Customers")
                    daOrders.Fill(mDataSet, "Orders")
                    ' relacionar las dos tablas del dataset por campo común
                    mDataSet.Relations.Add("Customers_Orders", mDataSet.Tables("Customers").Columns("CustomerID"), mDataSet.Tables("Orders").Columns("CustomerID"))
                    ' asignar al datagrid maestro la tabla Customers
                    Me.dgvMaestro.DataSource = mDataSet
                    Me.dgvMaestro.DataMember = "Customers"
                    ' asignar al datagrid detalles la relación que acabamos de crear por código
                    Me.dgvDetalle.DataSource = mDataSet
                    Me.dgvDetalle.DataMember = "Customers.Customers_Orders"
                End Using
            Catch ex As Exception
                MessageBox.Show(ex.Message)
            End Try
        End Sub

        Private Sub dgvMaestro_CellPainting(sender As Object, e As System.Windows.Forms.DataGridViewCellPaintingEventArgs) Handles dgvMaestro.CellPainting
            Try
                If e.RowIndex <> -1 Then
                    Using gridBrushb As Brush = New SolidBrush(Color.Blue), gridBrush As Brush = New SolidBrush(Me.dgvMaestro.GridColor), backColorBrushb As Brush = New SolidBrush(e.CellStyle.BackColor)
                        Using gridLinePen As Pen = New Pen(gridBrushb, 2), gridLinePen2 As Pen = New Pen(gridBrush)
                            e.Graphics.FillRectangle(backColorBrushb, e.CellBounds)
                            '
                            If e.RowIndex < dgvMaestro.Rows.Count - 2 AndAlso dgvMaestro.Item(0, e.RowIndex + 1).Value Is dgvMaestro.Item(0, e.RowIndex).Value Then
                                e.Graphics.DrawLine(gridLinePen2, e.CellBounds.Left, e.CellBounds.Bottom - 1, e.CellBounds.Right - 1, e.CellBounds.Bottom - 1)
                            Else
                                e.Graphics.DrawLine(gridLinePen, e.CellBounds.Left, e.CellBounds.Bottom - 1, e.CellBounds.Right - 1, e.CellBounds.Bottom - 1)
                            End If
                            '
                            e.Graphics.DrawLine(gridLinePen2, e.CellBounds.Right - 1, e.CellBounds.Top, e.CellBounds.Right - 1, e.CellBounds.Bottom)
                            e.Graphics.DrawString(CType(IIf(e.Value Is DBNull.Value, "", e.Value), String), e.CellStyle.Font, Brushes.Black, e.CellBounds.X + 2, e.CellBounds.Y + 5, StringFormat.GenericDefault)
                            '
                            e.Handled = True
                        End Using
                    End Using
                End If
            Catch ex As Exception
                MessageBox.Show(ex.Message)
            End Try
        End Sub
    End Class

    P.D.
    El resultado es la siguiente imagen

    Un saludo desde Bilbo
    Carlos

    jueves, 23 de mayo de 2019 6:07
  • Muchas gracias, me sirvió mucho.

    Saludos J. Carlos Herrero.

    martes, 28 de mayo de 2019 3:04