none
Consulta desde columna datagrid RRS feed

  • Pregunta

  • buenas noches gente del foro....tengo el siguiente codigo en el cual hgo una consulta a una bd y coloco los resultados en un datagrid.....hasta ahí todo bien....lo q no puedo lograr es que a partir de los datos d la primer columna (ubicacion) se hga una consulta a otra tabla y con los resultados rellene otra columna del mismo datagrid.....

    Con este codigo obtengo id de la columna para hacer la consulta en la siguiente columna 

    For Each row As GridViewRowInfo In Me.DgvMaterialSeleccionado.Rows
                Id = row.Cells(0).Value
            Next

    Espero me puedan ayudar 

    miércoles, 25 de marzo de 2020 17:48

Respuestas

  • Option Explicit On
    Option Strict On
    Imports System.Data.SqlClient
    
    Public Class Form1
        Private msCadenaSQL As String = "Data Source=.\SQLEXPRESS;Initial Catalog=Northwind;Integrated Security=True"
        Private mDataTable As New DataTable
    
        Private Sub Form1_Load(sender As Object, e As System.EventArgs) Handles Me.Load
            Try
                Using loConexion As New SqlConnection(msCadenaSQL)
                    Dim loDataAdapter As New SqlDataAdapter("SELECT CustomerID, CompanyName FROM Customers", loConexion)
                    loDataAdapter.Fill(mDataTable)
                    Me.DataGridView1.DataSource = mDataTable
                End Using
            Catch ex As Exception
                MessageBox.Show(ex.Message)
            End Try
            'Añadir una nueva columna al Datatable
            Dim lDataColumn As DataColumn
            lDataColumn = New DataColumn("NuevaColumna", GetType(String))
            lDataColumn.MaxLength = 30
            mDataTable.Columns.Add(lDataColumn)
        End Sub
    
        Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
            For Each loFila As DataGridViewRow In Me.DataGridView1.Rows
                loFila.Cells("NuevaColumna").Value = lF_sNombre(loFila.Cells("CustomerID").Value.ToString)
            Next
    
        End Sub
    
        Private Function lF_sNombre(ByVal vsId As String) As String
            Dim loResultado As Object = Nothing
            Dim lsQuery As String = "Select ContactName From Customers Where CustomerID=@Id"
            Try
                Using loConexion As New SqlConnection(msCadenaSQL)
                    Using loComando As New SqlCommand(lsQuery, loConexion)
                        loComando.Parameters.Add(New SqlParameter("@Id", vsId))
                        loConexion.Open()
                        loResultado = loComando.ExecuteScalar()
                    End Using
                End Using
                If IsDBNull(loResultado) = True Then
                    Return String.Empty
                End If
            Catch ex As Exception
                MessageBox.Show(ex.Message, "", MessageBoxButtons.OK, MessageBoxIcon.Information)
            End Try
            Return loResultado.ToString
        End Function
    Lo solucione con este ejemplo , espero le sirva a alguien mas
    viernes, 27 de marzo de 2020 0:50

Todas las respuestas

  • Hola Promaster12

    Ok dices que si te funciona a la hora de conseguir los datos del primer GridView entonces porque no ejecutas el query de la BD directamente ahi mismo?

    For Each row As GridViewRowInfo In Me.DgvMaterialSeleccionado.Rows
                Id = row.Cells(0).Value
            Next
    
    dim cmd as new SqlCommand("SELECT tucampo FROM tabla WHERE Id=@CustomerID",constring)
    
    cmd.Parameters.AddWithValue("@CustomerId",nombredeltextboxdelID.Text) 

    Y ya de la misma manera que llenaste la primera, lo haces con esta

    Saludos


    miércoles, 25 de marzo de 2020 19:45
    Moderador
  • Que tal oscar lo que deseo lograr es llenar una columna con una consulta sql, Digamos que en mi primera Celda pongo ID= 2 ENTONCES en mi columna Nombre me traera el nombre segun el Id de la persona, Espero me este explicando , seria como un autollenado 
    miércoles, 25 de marzo de 2020 22:30
  • Hola:
    Si por cada fila de la primera consulta (1 fila por cada ID), tienes que rellenar 1 columna con1 nombre.
    ¿Porque no incluyes el campo nombre en la primera consulta aunque el campo nombre este en otra tabla?
    ¿Puedes poner las estructuras de las tabla implicadas?
    Un saludo desde Bilbo
    Carlos
    jueves, 26 de marzo de 2020 10:11
  • Option Explicit On
    Option Strict On
    Imports System.Data.SqlClient
    
    Public Class Form1
        Private msCadenaSQL As String = "Data Source=.\SQLEXPRESS;Initial Catalog=Northwind;Integrated Security=True"
        Private mDataTable As New DataTable
    
        Private Sub Form1_Load(sender As Object, e As System.EventArgs) Handles Me.Load
            Try
                Using loConexion As New SqlConnection(msCadenaSQL)
                    Dim loDataAdapter As New SqlDataAdapter("SELECT CustomerID, CompanyName FROM Customers", loConexion)
                    loDataAdapter.Fill(mDataTable)
                    Me.DataGridView1.DataSource = mDataTable
                End Using
            Catch ex As Exception
                MessageBox.Show(ex.Message)
            End Try
            'Añadir una nueva columna al Datatable
            Dim lDataColumn As DataColumn
            lDataColumn = New DataColumn("NuevaColumna", GetType(String))
            lDataColumn.MaxLength = 30
            mDataTable.Columns.Add(lDataColumn)
        End Sub
    
        Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
            For Each loFila As DataGridViewRow In Me.DataGridView1.Rows
                loFila.Cells("NuevaColumna").Value = lF_sNombre(loFila.Cells("CustomerID").Value.ToString)
            Next
    
        End Sub
    
        Private Function lF_sNombre(ByVal vsId As String) As String
            Dim loResultado As Object = Nothing
            Dim lsQuery As String = "Select ContactName From Customers Where CustomerID=@Id"
            Try
                Using loConexion As New SqlConnection(msCadenaSQL)
                    Using loComando As New SqlCommand(lsQuery, loConexion)
                        loComando.Parameters.Add(New SqlParameter("@Id", vsId))
                        loConexion.Open()
                        loResultado = loComando.ExecuteScalar()
                    End Using
                End Using
                If IsDBNull(loResultado) = True Then
                    Return String.Empty
                End If
            Catch ex As Exception
                MessageBox.Show(ex.Message, "", MessageBoxButtons.OK, MessageBoxIcon.Information)
            End Try
            Return loResultado.ToString
        End Function
    Lo solucione con este ejemplo , espero le sirva a alguien mas
    viernes, 27 de marzo de 2020 0:50
  • Hola:
    Si ejecutas la siguiente sentencia
    SELECT CustomerID, CompanyName, ContactName AS NuevaColumna FROM Customers
    PREGUNTA - Que diferencia hay con todo el codigo que has expuesto
    RESPUESTA - Ninguna, y la diferencia de codigo y de eficiencia es abismal

    Un saludo desde Bilbo
    Carlos
    viernes, 27 de marzo de 2020 11:14