Dim cnString As String = "Bla Bla Bla ::: OpenConnection Database"
Dim cn As New SqlConnection
With cn
If .State = ConnectionState.Open Then .Close()
cn.ConnectionString = cnString
.Open()
End With
Dim sql As String = " select top 500 "
sql &= " Ta.idTableAccount , Ta.InvNo , Ta.Amount ,"
sql &= " Ta.Volume,"
'---- Consignee "
sql &= " Cn.TitleConsignee "
sql &= " From TableAccount Ta "
sql &= " Inner Join Consignee Cn On Ta.Consignee = Cn.idConsignee "
Dim da As New SqlDataAdapter(Sql, cn)
Dim ds As New DataSet
da.Fill(ds, "ShowAllTableAccount")
Dim sqlSub As String = " select top 500 "
sqlSub &= " Tat.idTableAccount , "
sqlSub &= " Tat.Sendto , Tat.SendInv , Tat.Voy , "
sqlSub &= " Tat.etd, Tat.kaset , Tat.eu , "
sqlSub &= " Tat.isCancel,"
'---- Consignee & Country
sqlSub &= " Vs.NameVessel , de.country "
sqlSub &= " From TableAccount Tat "
sqlSub &= " inner join TableAccount TaSub On Tat.idTableAccount = TaSub.idTableAccount "
sqlSub &= " Inner Join Destination De On Tat.Country = De.idDestination "
sqlSub &= " Left Join Vessel Vs On Tat.Vessel = Vs.idVessel"
' da.SelectCommand.CommandText = sqlSub
Dim da1 As New SqlDataAdapter(sqlSub, cn)
' Dim ds1 As New DataSet
da1.Fill(ds, "ShowAllTableAccountSub")
Dim dcMaster, dcDetails As DataColumn
'--- อ่าน Field idTableAccountเก็บไว้ใน dcMaster
dcMaster = ds.Tables("ShowAllTableAccount").Columns("idTableAccount")
'--- อ่าน Field idTableAccountเก็บไว้ใน dcDetails
dcDetails = ds.Tables("ShowAllTableAccountSub").Columns("idTableAccount")
'--- สร้างความสัมพันธ์ และใส่ค่าไว้ที่ dl
Dim dl As New DataRelation("Details", dcMaster, dcDetails)
ds.Relations.Add(dl)
Dim dvm As New DataViewManager
dvm.DataSet = ds
Dim dvs As DataViewSetting
dvs = dvm.DataViewSettings("ShowAllTableAccount")
dvs.Sort = "idTableAccount"
dvs = dvm.DataViewSettings("ShowAllTableAccountSub")
dvs.Sort = "Consignee"
With FvAccount.dgvAcc
.ReadOnly = True
.DataSource = dvm
.DataMember = "ShowAllTableAccount"
End With
With FvAccount.subDgvAcc
.ReadOnly = True
.DataSource = dvm
.DataMember = "ShowAllTableAccount.idTableAccount"
End With
จะสังเกตุได้ว่า เรา Dim New DataAdpter และ Dataset แค่ครั้งแรกครั้งเดียว ส่วนครั้งที่สองนั้น เราสามารถใช้
DataAdapter ตัวเดิมได้ แล้ว จะต้องใช้ Dataset ตัวเดิม ห้าม Dim New เพราะใช้แล้ว Error ว่ามันไม่สามารถทำ
Relation กับตัว Dataset ที่ต่างกันได้ ( แปลมาว่างี้ )
ต่อมา มาเรื่องของ Ds.ReadXml เวลา Export File จากไหนๆก็ตาม ยกตัวอย่างจาก Access
Export File ออกมาแบบธรรมดาไม่ต้องเอา Schema ( จะมี Option ขั้นสูงฝัง Schema มากับ Data เลย )
เพราะถ้าฝังมาด้วย มันจะทำให้ ds.ReadXml อ่านไม่ได้
พออ่านได้เราก็เอา ds.ReadXml("d:/Test.xml") << หรือรับค่ามาจาก OpenFileDialogbox ก็ได้
แล้วก็ไป Binding ใส่ Control ต่างๆได้ ต่อ ไป การอ้างถึงก็คือ
Ds.Tables("ชื่อTable")
ข้อควรจำในการ Export File มาเป็น Dataset
**** ถ้ามี Column ตรงกับชื่อ Table มันจะทำให้การอ่านค่าผิดพลาด จะต้องไม่ให้ ชื่อ Column ไม่ซ้ำกับชื่อของ Table เด็ดขาด !!
ไม่มีความคิดเห็น:
แสดงความคิดเห็น