同一个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
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