วันอาทิตย์ที่ 13 มกราคม พ.ศ. 2551

Datarelation กับ Dataset Read Xml

DataRelation เอา 2 Dataset มา Relation กัน โดย มันจะต้องอยู่ใน dataset ตัวเดียวกัน
'--- อันนี้เป็นการทำ Relation กับตัวมันเอง 1 Talbe ( ทำมาไมวะตู - -" )

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 เด็ดขาด !!

ไม่มีความคิดเห็น: