Foros del Web » Programando para Internet » ASPX (.net) »

Hacer una especie de Inner Join de dos datatables

Estas en el tema de Hacer una especie de Inner Join de dos datatables en el foro de ASPX (.net) en Foros del Web. Amigos, Tengo dos tablas, la tabla Categories y la tabla Productos. Necesito hacer una especie de inner join teniendo como referencia la columna CategoryID . ...
  #1 (permalink)  
Antiguo 28/10/2010, 04:21
 
Fecha de Ingreso: septiembre-2006
Ubicación: Buenos Aires
Mensajes: 132
Antigüedad: 17 años, 7 meses
Puntos: 0
Exclamación Hacer una especie de Inner Join de dos datatables

Amigos,
Tengo dos tablas, la tabla Categories y la tabla Productos. Necesito hacer una especie de inner join teniendo como referencia la columna CategoryID .

Como soy medio bruto con ASPX pero bueno con Photoshop, dejo una imagen que ilustra exactamente mi problema:


Este es el website que lo hice con la base northwind.mdb para que sea mas facil
Descargar ejemplo


y este es mi codigo

Código:
<%@ Page Language="VB" AutoEventWireup="false" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.OleDb" %>

<script language="VB" runat="server">

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

        Dim MyConn1 As OleDbConnection = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Server.MapPath("App_Data/Northwind.mdb"))
        Dim da As OleDbDataAdapter = New OleDbDataAdapter("SELECT * FROM Categories", MyConn1)
        Dim ds As DataSet = New DataSet()
        Dim dtExcel As New DataTable

        MyConn1.Open()
        da.Fill(ds)
        da.Fill(dtExcel)

        grvExcelData.DataSource = ds.Tables(0)
        grvExcelData.DataBind()

        MyConn1.Close()

        Dim MyConn2 As OleDbConnection = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Server.MapPath("App_Data/Northwind.mdb"))
        Dim da2 As OleDbDataAdapter = New OleDbDataAdapter("SELECT * FROM Products", MyConn2)
        Dim ds2 As DataSet = New DataSet()
        Dim dtDB As New DataTable

        MyConn2.Open()
        da2.Fill(ds2)
        da2.Fill(dtDB)

        grvDB.DataSource = ds2.Tables(0)
        grvDB.DataBind()

        Dim dtNew As DataTable = New DataTable
        dtNew.Columns.Add("CategoryID")
        dtNew.Columns.Add("CategoryName")
        dtNew.Columns.Add("QuantityPerUnit")
        Dim i As Integer = 0
       Do While (i < dtExcel.Rows.Count)
            If dtExcel.Rows(i)("CategoryID") IsNot Nothing Then
                Dim drNew = dtNew.NewRow()
                drNew("CategoryID") = dtExcel.Rows(i)("CategoryID").ToString 
                drNew("CategoryName") = dtExcel.Rows(i)("CategoryName").ToString 
                drNew("QuantityPerUnit") = dtDB.Select(("CategoryID=" & dtExcel.Rows(i)("CategoryID")))(0)("QuantityPerUnit").ToString
                dtNew.Rows.Add(drNew)
            End If
            i = (i + 1)
        Loop
        grvGridData.DataSource = dtNew.DefaultView
        grvGridData.DataBind()

    End Sub


</script>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    <asp:Label ID="lblDisplay" Runat="Server" Text="Hello!" />
        <asp:GridView ID="grvExcelData" runat="server" AutoGenerateColumns="true" Visible="true">
        </asp:GridView>
        <asp:GridView ID="grvGridData" runat="server" AutoGenerateColumns="true" Visible="true" >
        </asp:GridView>        
        <asp:GridView ID="grvDB" runat="server" AutoGenerateColumns="true" Visible="true">
        </asp:GridView>

    </div>
    </form>
</body>
</html>


muchas gracias a quien me pueda ayudar!
  #2 (permalink)  
Antiguo 28/10/2010, 08:47
Avatar de jaullo  
Fecha de Ingreso: abril-2009
Mensajes: 994
Antigüedad: 15 años
Puntos: 30
Respuesta: Hacer una especie de Inner Join de dos datatables

Bueno veamos, creo que la idea va un poco por acá. Revisalo a ver porque la verdad no tengo tiempo para probarlo, pero al menos puede darte una idea

Código MySQL:
Ver original
  1. SELECT  Categories.CategoryId, Categories.CategoryName, Products.QuantityPerUnit
  2. FROM     categories INNER JOIN
  3.                Products ON categories.CategoryId = Products .CategoryId LEFT JOIN

Saludos,
__________________
http://geekswithblogs.net/jaullo/Default.aspx
Si te he ayudado regalame Karma positivo!!!
  #3 (permalink)  
Antiguo 28/10/2010, 13:09
 
Fecha de Ingreso: septiembre-2006
Ubicación: Buenos Aires
Mensajes: 132
Antigüedad: 17 años, 7 meses
Puntos: 0
Respuesta: Hacer una especie de Inner Join de dos datatables

Si pero necesito hacer ese "inner join" pero con los datatables porque en el codigo original estoy haciendo un select de una base de datos SQL y otro select de una planilla excel....
  #4 (permalink)  
Antiguo 28/10/2010, 15:07
Avatar de jaullo  
Fecha de Ingreso: abril-2009
Mensajes: 994
Antigüedad: 15 años
Puntos: 30
Respuesta: Hacer una especie de Inner Join de dos datatables

Bueno, eso no lo indicaste. Recordar que un datatable es una colección en memoria, lo que pides hasta donde creo entender no es posible tal como lo quieres. Lo mejor es realizar el inner join directamente de los elementos.

Ahora, lo que si es posible que al final es muy parecido es hacer un Merge de los dos Datables en uno solo:

Using Merge Method ucan add two tables
DataTable dt = new DataTable();

DataTable dt1 = new DataTable();

dt.Merge(dt1);
__________________
http://geekswithblogs.net/jaullo/Default.aspx
Si te he ayudado regalame Karma positivo!!!
  #5 (permalink)  
Antiguo 28/10/2010, 15:10
Avatar de jaullo  
Fecha de Ingreso: abril-2009
Mensajes: 994
Antigüedad: 15 años
Puntos: 30
Respuesta: Hacer una especie de Inner Join de dos datatables

Bueno, parece que tengo problemas con el foro porque me aparece un poco desordenado y las opciones comunes no funcionan.

Pero te dejo estos enlaces
http://msdn.microsoft.com/en-us/library/fk68ew7b.aspx
http://forums.asp.net/p/1557426/3833958.aspx#3833958
__________________
http://geekswithblogs.net/jaullo/Default.aspx
Si te he ayudado regalame Karma positivo!!!
  #6 (permalink)  
Antiguo 10/11/2010, 21:59
 
Fecha de Ingreso: diciembre-2007
Mensajes: 41
Antigüedad: 16 años, 4 meses
Puntos: 0
Respuesta: Hacer una especie de Inner Join de dos datatables

Lo haces haciendo un store procedure con el inner join y despues lo levantas con un data adapter

Etiquetas: dos, join, aspx
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 02:13.