Dengan bantuan DataView, kita dapat membuat tampilan berbeda untuk data yang disimpan di DataTable. Misalnya, melalui DataView, Anda bisa menggunakan susunan pengurutan yang berbeda untuk melihat data di DataTable, atau memfilter data di DataTable berdasarkan status kolom data atau ekspresi filter. Yang penting adalah ketika kita perlu membuat tampilan berbeda untuk data di DataTable dan mengikat data ini ke kontrol di formulir, kita perlu menggunakan DataView untuk menyelesaikannya.
DataView menyediakan tampilan data dinamis, yaitu kontennya, urutannya, dan anggotanya akan mencerminkan perubahan apa pun di DataTable sumber. Jelas DataView sangat berbeda dari metode DataTable.Select. Metode Select akan mengembalikan array objek DataRow dari tabel data berdasarkan ekspresi filter atau urutan pengurutan tertentu, dan anggota serta urutan pengurutannya bersifat statis. Karena sifat DataView yang dinamis dan reaktif, sangat cocok digunakan pada aplikasi data binding.
DataView memberi Anda tampilan dinamis dari kumpulan data tunggal. Anda dapat menerapkan urutan pengurutan dan kondisi filter yang berbeda ke kumpulan data. Ini agak mirip dengan Tampilan yang disediakan oleh database SQL Server. Namun masih terdapat perbedaan besar antara DataView dan tampilan database, karena DataView tidak dapat digunakan sebagai tabel data, juga tidak dapat memberikan tampilan untuk menghubungkan tabel data. Selain itu, Anda tidak hanya tidak dapat mengecualikan bidang dalam tabel data sumber, Anda juga tidak dapat menambahkan bidang tambahan yang tidak ada dalam tabel data sumber (misalnya: bidang ekspresi).
Anda dapat membuat DataView dengan dua cara. Cara pertama adalah dengan menggunakan konstruktor DataView, dan cara kedua adalah dengan membuat referensi ke properti DefaultView DataTable. Artikel ini akan membahas secara detail cara menggunakan kedua metode ini untuk membuat DataView.
Menggunakan konstruktor DataView
Konstruktor DataView menyediakan tiga versi multiload seperti yang ditunjukkan pada tabel di bawah.
Versi multiload dari konstruktor DataView
Tampilan Data()
DataView (tabel ByVal Sebagai DataTable)
DataView(Tabel ByVal Sebagai DataTable, _
ByVal RowFilter Sebagai String, _
ByVal Urutkan Sebagai String, _
ByVal RowState Sebagai DataViewRowState)
Versi pertama konstruktor DataView menginisialisasi instance baru kelas DataView tanpa parameter apa pun. Harap perhatikan bahwa jika Anda menggunakan versi ini untuk membuat DataView, Anda harus menyetel properti Tabel terlebih dahulu setelah membuat objek DataView untuk menentukan DataTable sumbernya, lalu Anda dapat melanjutkan menyetel properti lainnya (RowFilter, Sort...dll.) .
Kode program berikut menunjukkan cara menggunakan versi pertama konstruktor DataView untuk membuat objek DataView untuk memfilter dan mengurutkan kolom data tabel data "Zhang Limin Studio" di kumpulan data, dan mengikat kontrol DataGridView ke ini Tampilan Data. Kami menemukan bahwa kontrol DataGrid hanya akan menampilkan wanita, dan data akan disusun berdasarkan urutan guratan nama dari yang terbanyak hingga yang terkecil. Berikut ini adalah kode program untuk contoh ini:
SqlDataAdapter1.Fill(Ds Zhang Limin Studio, "Zhang Limin Studio")
'Buat objek DataView
Redupkan dv As DataView = New DataView
' Karena konstruktor DataView tanpa parameter apa pun digunakan untuk membuat objek DataView,
' Oleh karena itu, properti Tabel harus disetel terlebih dahulu untuk menentukan DataTable sumbernya
dv.Table = Ds Zhang Limin Studio. Zhang Limin Studio
' Mengatur urutan guratan nama dari yang paling banyak sampai yang paling sedikit.
dv.Sort = "NameDESC"
' Atur kondisi filter untuk hanya menampilkan wanita
dv.RowFilter = "Gender = 'Female'"
' Ikat kontrol DataGridView ke DataView
DataGridView1.DataSource = dv
Versi kedua dari konstruktor DataView mewakili penggunaan DataTable yang ditentukan untuk menginisialisasi instance baru kelas DataView.
Kode program berikut menunjukkan cara menggunakan versi kedua konstruktor DataView untuk membuat objek DataView untuk memfilter dan mengurutkan kolom data tabel data "Zhang Limin Studio" di kumpulan data, dan mengikat kontrol DataGridView ke ini Tampilan Data . Kami menemukan bahwa kontrol DataGridView hanya akan menampilkan data karyawan "Departemen Informasi", dan data tersebut akan disusun dari tinggi ke rendah sesuai dengan gaji saat ini:
SqlDataAdapter1.Fill(Ds Zhang Limin Studio, "Zhang Limin Studio")
' Buat objek DataView
Dim dv As DataView = New DataView(Ds Zhang Limin Studio. Zhang Limin Studio)
'Atur urutan pengurutan dari tinggi ke rendah berdasarkan gaji saat ini
dv.Sort = "Desc Gaji Saat Ini"
'Setel kondisi filter untuk hanya menampilkan data karyawan "Departemen Informasi"
dv.RowFilter = "Department = 'Information Department'"
' Ikat kontrol DataGridView ke DataView
Saya.DataGridView1.DataSource = dv
Versi ketiga konstruktor DataView mewakili inisialisasi instance baru kelas DataView menggunakan DataTable, RowFilter, Sort, dan DataViewRowState yang ditentukan.
Kode program berikut menunjukkan cara menggunakan versi ketiga konstruktor DataView untuk membuat objek DataView untuk memfilter dan mengurutkan kolom data tabel data "Zhang Limin Studio" di kumpulan data, dan mengikat kontrol DataGridView ke ini Tampilan Data . Kami menemukan bahwa kontrol DataGridView hanya akan menampilkan data karyawan yang gajinya saat ini lebih besar dari 49.000 yuan, dan data tersebut akan disusun dari tinggi ke rendah sesuai dengan gaji saat ini:
SqlDataAdapter1.Fill(Ds Zhang Limin Studio, "Zhang Limin Studio")
' Buat objek DataView
Redupkan dv Sebagai DataView = DataView Baru( _
Studio Zhang Limin.
"Gaji saat ini > 49000", _
"Gaji saat ini DESC", _
DataViewRowState.CurrentRows)
' Ikat kontrol DataGridView ke DataView
Me.DataGridView1.DataSource = dv
Saya ingin mengingatkan semua orang bahwa ketika DataView dibuat, dan ketika salah satu properti Sortir, RowFilter, atau RowStateFilter diubah, indeks DataView akan dibuat kembali. Artinya, jika Anda ingin menikmati performa terbaik, Anda harus menentukan urutan pengurutan atau kriteria filter langsung di konstruktor saat membuat DataView. Jika Anda tidak secara langsung menentukan urutan pengurutan atau kondisi filter di konstruktor saat membuat DataView, namun mengatur properti Sortir, RowFilter, atau RowStateFilter objek DataView setelah membuatnya, indeks DataView akan dibuat ulang indeks yang akan dibuat setidaknya dua kali.
Menggunakan properti DefaultView dari DataTable
Properti DefaultView dari DataTable mengembalikan objek DataView yang menggunakan DataTable sebagai tabel data sumber, memungkinkan Anda mengurutkan, memfilter, dan mencari kolom data di DataTable. Jika DataView yang Anda buat ingin menampilkan semua kolom data di DataTable dan mengaturnya dalam urutan alami, menggunakan properti DefaultView dari DataTable akan menjadi cara yang sangat langsung dan nyaman untuk membuat DataView.
Untuk program yang layar eksekusinya ditunjukkan pada Gambar 1, ia menggunakan properti DefaultView dari DataTable untuk membuat DataView sehingga semua kolom data dari tabel data sumber dapat ditampilkan di kontrol DataGrid di awal, dan memungkinkan pengguna untuk meneruskan DataView selama fase eksekusi untuk memfilter data secara dinamis. Kode programnya tercantum di bawah ini:
' Deklarasi tingkat kategori objek DataView
Private dv Sebagai DataView
Private Sub DemoForm5_Load(Pengirim ByVal Sebagai System.Object, _
ByVal e As System.EventArgs) Menangani MyBase.Load
FillComboBoxDepartment()
SqlDataAdapter1.Fill(Ds Zhang Limin Studio, "Zhang Limin Studio")
' Buat DataView
dv = Ds Zhang Limin Studio.Zhang Limin Studio.DefaultView
' Menampilkan jumlah kolom data di DataView
txtRowCount.Text = dv.Count.ToString
' Ikat kontrol DataGridView ke DataView
Saya.DataGridView1.DataSource = dv
Akhir Sub
Sub Pribadi FillComboBoxDepartment()
'Buat objek perintah data (yaitu objek SqlCommand)
Redupkan foxCMD Sebagai SqlCommand Baru
foxCMD.Koneksi = SqlConnection1
foxCMD.CommandText = "PILIH Departemen BERBEDA DARI dbo.Zhang Limin Studio"
'Buka koneksi
SqlConnection1.Open()
Menggunakan myReader Sebagai SqlDataReader = foxCMD.ExecuteReader()
Jika myReader.HasRows Lalu
Sementara myReader.Read()
ComboBoxDepartment.Items.Add(myReader.GetSqlString(0))
Berakhir Sementara
Akhiri Jika
Akhiri Penggunaan
ComboBoxDepartment.SelectedIndex = 0
Akhiri Sub
Pribadi Sub btnFilter_Click(Pengirim ByVal Sebagai System.Object, _
ByVal e As System.EventArgs) Menangani btnFilter.Click
dv.RowFilter = "Departemen= '" & _
ComboBoxDepartment.SelectedItem.ToString() & "'"
'Menampilkan jumlah kolom data di DataView
txtRowCount.Teks = dv.Count.ToString
Sub Akhir
http://www.cnblogs.com/liminzhang/archive/2006/10/23/537518.html