ด้วยความช่วยเหลือของ DataView เราสามารถสร้างมุมมองที่แตกต่างกันสำหรับข้อมูลที่จัดเก็บไว้ใน DataTable ตัวอย่างเช่น ผ่าน DataView คุณสามารถใช้ลำดับการจัดเรียงที่แตกต่างกันเพื่อดูข้อมูลใน DataTable หรือกรองข้อมูลใน DataTable ตามสถานะคอลัมน์ข้อมูลหรือนิพจน์ตัวกรอง สิ่งสำคัญคือเมื่อเราจำเป็นต้องสร้างมุมมองที่แตกต่างกันสำหรับข้อมูลใน DataTable และผูกข้อมูลเหล่านี้เข้ากับตัวควบคุมบนแบบฟอร์ม เราจำเป็นต้องใช้ DataView เพื่อดำเนินการให้เสร็จสิ้น
DataView ให้มุมมองข้อมูลแบบไดนามิก นั่นคือเนื้อหา ลำดับการจัดเรียง และสมาชิกจะสะท้อนถึงการเปลี่ยนแปลงใดๆ ใน DataTable ต้นทาง แน่นอนว่า DataView แตกต่างจากวิธี DataTable.Select มาก วิธีการ Select จะส่งคืนอาร์เรย์ของออบเจ็กต์ DataRow จากตารางข้อมูลตามนิพจน์ตัวกรองหรือลำดับการจัดเรียงเฉพาะ และสมาชิกและลำดับการจัดเรียงเป็นแบบคงที่ เนื่องจากลักษณะปฏิกิริยาไดนามิกของ DataView จึงเหมาะมากสำหรับใช้ในแอปพลิเคชันการเชื่อมโยงข้อมูล
DataView ช่วยให้คุณมีมุมมองแบบไดนามิกของการรวบรวมข้อมูลเดียว คุณสามารถใช้ลำดับการจัดเรียงและเงื่อนไขการกรองที่แตกต่างกันกับการรวบรวมข้อมูลได้ ซึ่งค่อนข้างคล้ายกับมุมมองที่จัดทำโดยฐานข้อมูล SQL Server อย่างไรก็ตาม ยังคงมีความแตกต่างอย่างมากระหว่าง DataView และมุมมองฐานข้อมูล เนื่องจาก DataView ไม่สามารถใช้เป็นตารางข้อมูลได้ และไม่สามารถให้มุมมองเพื่อเชื่อมต่อตารางข้อมูลได้ นอกจากนี้ ไม่เพียงแต่คุณไม่สามารถยกเว้นฟิลด์ในตารางข้อมูลต้นฉบับได้ คุณยังไม่สามารถเพิ่มฟิลด์เพิ่มเติมที่ไม่มีอยู่ในตารางข้อมูลต้นฉบับได้ (เช่น: ฟิลด์นิพจน์)
คุณสามารถสร้าง DataView ได้สองวิธี วิธีแรกคือการใช้ตัวสร้าง DataView และวิธีที่สองคือการสร้างการอ้างอิงไปยังคุณสมบัติ DefaultView ของ DataTable บทความนี้จะสำรวจรายละเอียดวิธีการใช้ทั้งสองวิธีนี้เพื่อสร้าง DataView
การใช้ตัวสร้าง DataView
ตัวสร้าง DataView มีเวอร์ชันมัลติโหลดสามเวอร์ชันดังที่แสดงในตารางด้านล่าง
ตัวสร้าง DataView เวอร์ชันหลายโหลด
ข้อมูลมุมมอง()
DataView (ตาราง ByVal เป็น DataTable)
DataView (ตาราง ByVal เป็น DataTable, _
ByVal RowFilter เป็นสตริง _
ByVal เรียงลำดับเป็นสตริง _
ByVal RowState เป็น DataViewRowState)
เวอร์ชันแรกของตัวสร้าง DataView เตรียมใช้งานอินสแตนซ์ใหม่ของคลาส DataView โดยไม่มีพารามิเตอร์ใดๆ โปรดทราบว่าหากคุณใช้เวอร์ชันนี้เพื่อสร้าง DataView คุณต้องตั้งค่าคุณสมบัติตารางก่อนหลังจากสร้างออบเจ็กต์ DataView เพื่อกำหนด DataTable ต้นทาง จากนั้นคุณสามารถตั้งค่าคุณสมบัติอื่นๆ ต่อไปได้ (RowFilter, Sort...ฯลฯ) .
รหัสโปรแกรมต่อไปนี้สาธิตวิธีใช้เวอร์ชันแรกของตัวสร้าง DataView เพื่อสร้างวัตถุ DataView เพื่อกรองและเรียงลำดับคอลัมน์ข้อมูลของตารางข้อมูล "Zhang Limin Studio" ในชุดข้อมูล และผูกตัวควบคุม DataGridView กับสิ่งนี้ DataView เราพบว่าตัวควบคุม DataGrid จะแสดงเฉพาะผู้หญิงเท่านั้น และข้อมูลจะถูกจัดเรียงตามลำดับเส้นของชื่อจากมากไปน้อย ต่อไปนี้เป็นโค้ดโปรแกรมสำหรับตัวอย่างนี้:
SqlDataAdapter1.Fill (Ds Zhang Limin Studio, "Zhang Limin Studio")
'สร้างวัตถุ DataView
Dim dv As DataView = New DataView
' เนื่องจากมีการใช้ตัวสร้าง DataView ที่ไม่มีพารามิเตอร์ใดๆ เพื่อสร้างวัตถุ DataView
' ดังนั้น จะต้องตั้งค่าคุณสมบัติ Table ก่อนจึงจะกำหนด DataTable ต้นทางได้
dv.Table = Ds Zhang Limin Studio
' กำหนดลำดับการจัดเรียงเพื่อให้เรียงลำดับเส้นของชื่อจากมากไปน้อย
dv.Sort = "NameDESC"
' ตั้งค่าเงื่อนไขตัวกรองเพื่อแสดงเฉพาะผู้หญิง
dv.RowFilter = "Gender = 'Female'"
' ผูกตัวควบคุม DataGridView กับ DataView
DataGridView1.DataSource = dv
รุ่นที่สองของตัวสร้าง DataView แสดงถึงการใช้ DataTable ที่ระบุเพื่อเริ่มต้นอินสแตนซ์ใหม่ของคลาส DataView
รหัสโปรแกรมต่อไปนี้สาธิตวิธีใช้เวอร์ชันที่สองของตัวสร้าง DataView เพื่อสร้างวัตถุ DataView เพื่อกรองและเรียงลำดับคอลัมน์ข้อมูลของตารางข้อมูล "Zhang Limin Studio" ในชุดข้อมูล และผูกตัวควบคุม DataGridView กับสิ่งนี้ ดาต้าวิว เราพบว่าตัวควบคุม DataGridView จะแสดงเฉพาะข้อมูลพนักงานของ "แผนกข้อมูล" เท่านั้น และข้อมูลจะถูกจัดเรียงจากสูงไปต่ำตามเงินเดือนปัจจุบัน:
SqlDataAdapter1.Fill(Ds Zhang Limin Studio, "Zhang Limin Studio")
' สร้างวัตถุ DataView
Dim dv As DataView = New DataView(Ds Zhang Limin Studio. Zhang Limin Studio)
'ตั้งค่าการเรียงลำดับเพื่อเรียงลำดับจากสูงไปต่ำตามเงินเดือนปัจจุบัน
dv.Sort = "DESC เงินเดือนปัจจุบัน"
'กำหนดเงื่อนไขการกรองให้แสดงเฉพาะข้อมูลพนักงานของ "ฝ่ายสารสนเทศ"
dv.RowFilter = "Department = 'Information Department'"
' ผูกตัวควบคุม DataGridView กับ DataView
Me.DataGridView1.DataSource = dv
เวอร์ชันที่สามของตัวสร้าง DataView แสดงถึงการเริ่มต้นอินสแตนซ์ใหม่ของคลาส DataView โดยใช้ DataTable, RowFilter, Sort และ DataViewRowState ที่ระบุ
รหัสโปรแกรมต่อไปนี้สาธิตวิธีใช้เวอร์ชันที่สามของตัวสร้าง DataView เพื่อสร้างวัตถุ DataView เพื่อกรองและเรียงลำดับคอลัมน์ข้อมูลของตารางข้อมูล "Zhang Limin Studio" ในชุดข้อมูล และผูกตัวควบคุม DataGridView กับสิ่งนี้ ดาต้าวิว เราพบว่าตัวควบคุม DataGridView จะแสดงเฉพาะข้อมูลพนักงานที่มีเงินเดือนปัจจุบันมากกว่า 49,000 หยวน และข้อมูลจะถูกจัดเรียงจากสูงไปต่ำตามเงินเดือนปัจจุบัน:
SqlDataAdapter1.Fill(Ds Zhang Limin Studio, "Zhang Limin Studio")
' สร้างวัตถุ DataView
Dim dv As DataView = DataView ใหม่ ( _
Ds จาง Limin สตูดิโอ _
"เงินเดือนปัจจุบัน > 49000", _
"เงินเดือนปัจจุบัน DESC", _
DataViewRowState.CurrentRows)
' ผูกตัวควบคุม DataGridView กับ DataView
Me.DataGridView1.DataSource = dv
ฉันอยากจะเตือนทุกคนว่าเมื่อมีการสร้าง DataView และเมื่อมีการแก้ไขคุณสมบัติ Sort, RowFilter หรือ RowStateFilter ดัชนีของ DataView จะถูกสร้างขึ้นใหม่อีกครั้ง ซึ่งหมายความว่าหากคุณต้องการเพลิดเพลินกับประสิทธิภาพที่ดีที่สุด คุณควรระบุลำดับการจัดเรียงหรือเกณฑ์การกรองโดยตรงในตัวสร้างเมื่อสร้าง DataView หากคุณไม่ได้ระบุลำดับการจัดเรียงหรือเงื่อนไขตัวกรองโดยตรงในตัวสร้าง DataView แต่ตั้งค่าคุณสมบัติ Sort, RowFilter หรือ RowStateFilter ของออบเจ็กต์ DataView หลังจากสร้างแล้ว ดัชนีของ DataView จะถูกสร้างขึ้นใหม่อีกครั้ง ดัชนีที่จะสร้างอย่างน้อยสองครั้ง
การใช้คุณสมบัติ DefaultView ของ DataTable
คุณสมบัติ DefaultView ของ DataTable จะส่งกลับออบเจ็กต์ DataView ที่ใช้ DataTable เป็นตารางข้อมูลต้นฉบับ ซึ่งช่วยให้คุณสามารถจัดเรียง กรอง และค้นหาคอลัมน์ข้อมูลใน DataTable ได้ หาก DataView ที่คุณสร้างต้องการแสดงคอลัมน์ข้อมูลทั้งหมดใน DataTable และจัดเรียงตามลำดับที่เป็นธรรมชาติ การใช้คุณสมบัติ DefaultView ของ DataTable จะเป็นวิธีที่สะดวกและสะดวกในการสร้าง DataView
สำหรับโปรแกรมที่มีหน้าจอการดำเนินการแสดงในรูปที่ 1 จะใช้คุณสมบัติ DefaultView ของ DataTable เพื่อสร้าง DataView เพื่อให้สามารถแสดงในคอลัมน์ข้อมูลทั้งหมดของตารางข้อมูลต้นฉบับในตัวควบคุม DataGrid ที่จุดเริ่มต้น และอนุญาตให้ผู้ใช้ เพื่อส่งผ่าน DataView ในระหว่างขั้นตอนการดำเนินการเพื่อกรองข้อมูลแบบไดนามิก รหัสโปรแกรมแสดงอยู่ด้านล่าง:
' การประกาศระดับหมวดหมู่ของออบเจ็กต์ DataView
dv ส่วนตัวในฐานะ DataView
Private Sub DemoForm5_Load (ผู้ส่ง ByVal As System.Object, _
ByVal e As System.EventArgs) จัดการ MyBase.Load
FillComboBoxDepartment()
SqlDataAdapter1.Fill(Ds Zhang Limin Studio, "Zhang Limin Studio")
' สร้าง DataView
dv = Ds Zhang Limin Studio.DefaultView
' แสดงจำนวนคอลัมน์ข้อมูลใน DataView
txtRowCount.Text = dv.Count.ToString
' ผูกตัวควบคุม DataGridView กับ DataView
Me.DataGridView1.DataSource = dv
สิ้นสุด
ย่อยส่วนตัวย่อย FillComboBoxDepartment()
'สร้างวัตถุคำสั่งข้อมูล (เช่นวัตถุ SqlCommand)
Dim foxCMD เป็น SqlCommand ใหม่
foxCMD.Connection = SqlConnection1
foxCMD.CommandText = "เลือกแผนกที่แตกต่างจาก dbo.Zhang Limin Studio"
'เปิดการเชื่อมต่อ
SqlConnection1.Open()
การใช้ myReader เป็น SqlDataReader = foxCMD.ExecuteReader()
ถ้า myReader.HasRows แล้ว
ในขณะที่ myReader.Read()
ComboBoxDepartment.Items.Add(myReader.GetSqlString(0))
สิ้นสุดในขณะที่
สิ้นสุดถ้า
สิ้นสุดการใช้
ComboBoxDepartment.SelectedIndex = 0
สิ้นสุด Sub
Private Sub btnFilter_Click (ผู้ส่ง ByVal As System.Object, _
ByVal e As System.EventArgs) จัดการ btnFilter.Click
dv.RowFilter = "แผนก= '" & _
ComboBoxDepartment.SelectedItem.ToString() & "'"
'แสดงจำนวนคอลัมน์ข้อมูลใน DataView
txtRowCount.Text = dv.Count.ToString
จบย่อย
http://www.cnblogs.com/liminzhang/archive/2006/10/23/537518.html