首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > VB Dotnet >

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

2012-04-13 
同一个datagridview中使用两个不同数据源的问题如题,在实际工作中,遇到一部分数据从SQL server来(作为主表

同一个datagridview中使用两个不同数据源的问题
如题,在实际工作中,遇到一部分数据从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


[解决办法]
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 

热点排行