+ -
当前位置:首页 → 问答吧 → 同一个datagridview中使用两个不同数据源的问题

同一个datagridview中使用两个不同数据源的问题

时间:2011-12-26

来源:互联网

如题,在实际工作中,遇到一部分数据从SQL server来(作为主表),一部分数据从DB2来(作为从表),需要把这两者显示在一个datagridview中,并且主表中的值,从表中未必有,相当于一个left join的关系,但是无法使用单纯的数据库办法解决

查了一下,用到datarelation,不过还是没效果,按照下面的代码,datagridview中没有显示任何东西。。。。
求帮助,还是有其他办法


Imports System.Data
Imports System.Data.OleDb
Imports System.Data.SqlClient

Public Class Form1
  'set sqlserver 
  Dim sqlconnection As New OleDbConnection _
("Provider=SQLOLEDB.1;server:192.168.2.1;database=myDB;connect timeout=0;user_id=XX;password=XXX")

  'set db2 object
  Dim db2connection As New OleDbConnection _
("Provider=IBMDADB2;database=RPTDB;hostname=cshax9;protocol=TCPIP;port=50000;uid=xxxxx;pwd=xxxx;")



  Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  Dim sql1 = "select EQP_ID,AREA_ID from t_eqp_udata_name"
  Dim sqlDataAdpapter = New OleDbDataAdapter(sql1, sqlconnection)
  Dim ds = New DataSet()
  sqlDataAdpapter.Fill(ds, "tableSQL")

  Dim bs1 = New BindingSource()
  bs1.DataMember = "EQP_ID"
  bs1.DataSource = ds.Tables("tableSQL")

  Dim sql2 = "select EQP_ID,State from fveqp"
  Dim db2DataAdpapter = New OleDbDataAdapter(sql2, db2connection)
  db2DataAdpapter.Fill(ds, "tableDB2")


  '建立两表之间的关系
  Dim parentColunm = New DataColumn
  parentColunm = ds.Tables("tableSQL").Columns("EQP_ID")

  Dim childColunm = New DataColumn
  childColunm = ds.Tables("tableDB2").Columns("EQP_ID")

  Dim dr = New DataRelation("NEQP_ID", parentColunm, childColunm, False)
  ds.Relations.Add(dr)

  DataGridView1.DataMember = "NEQP_ID"
  DataGridView1.DataSource = bs1

  sqlDataAdpapter.Dispose()
  sqlconnection.Close()

  End Sub

作者: bsbwind   发布时间: 2011-12-26

DataRelation 用来绑定两个DataGridView 可以连动,你只绑一个表自然只显示一个表的数据。

你这个问题我想直接用 DataTable Merge 就可以了。但是Merge相当于 Full outter join 
VB.NET code

 Dim dt1 As New DataTable
 dt1.Columns.Add("a")
 dt1.Columns.Add("b")
 dt1.Rows.Add("a1", "b1")
 dt1.Rows.Add("a2", "b2")
 dt1.Rows.Add("a3", "b3")
 dt1.Rows.Add("a4", "b4")
 dt1.PrimaryKey = New DataColumn() {dt1.Columns(0)}

 Dim dt2 As New DataTable
 dt2.Columns.Add("a")
 dt2.Columns.Add("c")
 dt2.Rows.Add("a1", "c1")
 dt2.Rows.Add("a2", "c2")
 dt2.Rows.Add("a5", "c5")
 dt2.PrimaryKey = New DataColumn() {dt2.Columns(0)}

 dt1.Merge(dt2)
 For Each row As DataRow In dt1.Rows
     Console.WriteLine(String.Join(",", row.ItemArray))
 Next




作者: fangxinggood   发布时间: 2011-12-26