Senin, 19 Oktober 2009

Query satu atau lebih Datatable

Artikel ini menunjukkan sebuah contoh penggunaan Kelas JoinView yang dapat Anda download, dan kemudian sertakan dalam aplikasi Visual Basic. NET. Kelas JoinView yang mirip dengan kelas DataView yang memungkinkan Anda untuk menggabungkan dua atau lebih objek DataTable bersama-sama, dan untuk mengekspos bidang yang dipilih untuk sisa dari program Anda, atau ke mekanisme penyatuan data.
Tujuan utama dari kelas JoinView mengizinkan anda untuk menampilkan field dari beberapa tabel bersama-sama pada Windows Form datagrid control.


Kelas JoinView menawarkan fitur berikut:
  • Anda dapat menentukan field dari tabel induk terkait. Bidang ini hanya untuk dibaca.
  • Anda dapat menentukan subset field. Ini berarti bahwa Anda tidak perlu membangun objek DataGridTableStyle untuk membatasi kolom yang akan ditampilkan dalam kontrol datagrid, atau mengubah tatanan field.
  • Anda dapat menentukan sebuah alias untuk field. Secara default, alias digunakan untuk tampilan kolom. Dengan menetapkan sebuah alias, Anda tidak perlu membangun objek DataGridTableStyle dengan judul kolom.
  • Anda dapat mengurutkan dengan field apapun, termasuk "gabungan" field. Namun demikian, tidak seperti kelas DataView, yang dapat mengurutkan beberapa field. Properti AllowSort memungkinkan Anda untuk menonaktifkan sortir.
  • Anda dapat menambah, mengedit, dan menghapus catatan. AllowDelete, AllowEdit dan properti AllowNew memungkinkan Anda untuk menonaktifkan fitur ini.
  • Anda dapat membatalkan pengeditan dan baris baru. Objek JoinViewRow mendukung BeginEdit, CancelEdit, dan metode EndEdit. Pembaruan ditulis kembali ke DataTable.
Kelas JoinView tidak mendukung:
  • Sorting pada beberapa bidang.
  • Menghapus setelah kolom telah diterapkan. Sebaliknya, Anda harus menentukan kolom baru.
  • Dynamic filtering. Ini berarti bahwa jika Anda mengubah nilai bidang baris sehingga tidak lagi sesuai dengan kriteria pencarian, baris tetap dalam daftar.
  • Mengedit kolom dari tabel terkait.
  • Hirarkis navigasi.
  • Pemberitahuan bahwa pihak lain telah mengubah data dasar. Hal ini berhubungan khusus untuk menghapus baris. JoinView kelas yang tidak mendeteksi jika anda menghapus baris dari dasar DataTable. Ini dirancang untuk menjadi satu-satunya tampilan pada DataTable.
File sampel berisi empat kelas berikut:
  • FieldInfo: kelas ini menyimpan fieldName, FieldAlias, Hubungan, dan Jenis masing-masing bidang yang terpapar oleh kelas JoinView. fieldName adalah nama field dalam basis DataTable DataTable atau terkait. FieldAlias, adalah nama field yang terbuka, dan menjadi judul kolom default bila terikat pada datagrid control. Ketika Anda merujuk field, atau Anda mencari atau menyortir, Anda harus menggunakan FieldAlias. Hubungan adalah nama induk bidang DataRelation jika terletak di DataTable terkait. Informasi ini digunakan untuk memberikan generasi kolom dinamis di obyek JoinViewRow.
  • JoinView: Kelas ini setara dengan kelas DataView dan merupakan kelas utama yang digunakan. Perbandingan fungsi ditunjukkan di awal artikel ini. Kelas JoinView yang mengimplementasikan beberapa interface yang memberikan berbagai atribut:
  1. IList: antarmuka ini diimplementasikan sehingga Anda dapat mengikat JoinViewRow objek dalam daftar. Anda juga dapat menghitung dan menghapus baris. Menambahkan fungsionalitas telah dinonaktifkan.
  2. IBindingList: antarmuka ini memungkinkan Anda untuk menambahkan baris (melalui metode AddNew), dan mengurutkan mereka oleh kontrol datagrid.
  3. ITypedList: antarmuka ini memungkinkan mengikat konsumen untuk menemukan skema untuk daftar bindable, di mana properti yang tersedia untuk mengikat berbeda dari sifat-sifat umum untuk mengikat objek.
  4. IComparer: interface ini memberikan perbandingan kustom untuk objek ArrayList internal, dan memungkinkan Anda untuk mengurut kolom yang dipilih.
  • JoinViewRow: Objek ini setara dengan objek DataRowView dan mewakili satu baris dari tampilan. Bidang yang diakses oleh nama alias, yang jika tidak secara eksplisit ditentukan, adalah sama dengan nama field. Kelas JoinViewRow yang mengimplementasikan beberapa interface yang memberikan berbagai atribut:
  1. IEditableList: ini baris batalkan interface memberikan fungsionalitas melalui tombol ESC.
  2. ICustomTypedescriptor: ini tipe dinamis interface memberikan informasi tentang baris. Ini memungkinkan JoinViewRow untuk memberikan informasi properti dinamis dan adat accessor objek untuk mengikat konsumen.
  • JoinViewRowPropertyDescriptor: Kelas ini menyediakan metode accessor untuk setiap kolom JoinViewRow. Tanpa kelas dan antarmuka yang ICustomTypeDescriptor dilaksanakan oleh JoinViewRow, mengikat hanya terjadi pada properti publik bukannya ke daftar field yang dihasilkan secara dinamis.
SAMPLE APPLICATION

Bagian ini memberikan contoh aplikasi yang menciptakan sebuah instance dari kelas JoinView, dan mengikat ke Windows Form kontrol datagrid. Sampel ini menggunakan tabel Orders, Karyawan, dan Pelanggan dari Microsoft SQL Server database Northwind.
  • Dalam Visual Studio. NET, buat Windows Form baru.
  • Download kelas yang dijelaskan di awal artikel ini. Simpan file sebagai JoinView.vb.
  • Pada menu Project, Tambahkan file JoinView.vb ke proyek. kemudian akan terlihat JoinView.vb dalam jendela Solution Explorer.
  • Tampilkan form utama (Form1) dan tambahkan kontrol datagrid (DataGrid1) ke form.
  • Di bagian atas jendela kode bentuk, tambahkan pernyataan IMPOR berikut:
Imports System.Data
Imports System.Data.SqlClient
  • Tambahkan deklarasi variabel berikut:
Private ds As DataSet, jv As JoinView
  • kembali ke desaigner dan double-klik latar belakang formulir ini untuk menambahkan event handler Form.Load. Tambahkan kode berikut pada event handler:
'
' Fill the DataSet.
'
Dim cn As New SqlConnection("server=localhost;integrated security=true;database=northwind")
Dim daCust As New SqlDataAdapter("Select * From Customers", cn)
Dim daEmp As New SqlDataAdapter("Select * From Employees", cn)
Dim daOrd As New SqlDataAdapter("Select * From Orders Where CustomerID Like 'A%'", cn)
ds = New DataSet()
daCust.Fill(ds, "Cust")
daEmp.Fill(ds, "Emp")
daOrd.Fill(ds, "Ord")
'
' Establish relations between tables.
'
ds.Relations.Add("CustOrd", ds.Tables!Cust.Columns!CustomerID, ds.Tables!Ord.Columns!CustomerID)
ds.Relations.Add("EmpOrd", ds.Tables!Emp.Columns!EmployeeID, ds.Tables!Ord.Columns!EmployeeID)
'
' Create a new instance of the JoinView class and bind to the grid.
'
jv = New JoinView(ds.Tables!Ord, _
     "OrderID,CustomerID,EmployeeID,OrderDate,CustOrd.CompanyName Company,CustOrd.ContactName Contact,CustOrd.ContactTitle Position,EmpOrd.FirstName,EmpOrd.LastName", _
     "EmployeeID<5", "OrderDate")
DataGrid1.DataMember = ""
DataGrid1.DataSource = jv

Parameter kedua dari JoinView menentukan field yang harus ditampilkan, apakah mereka berasal dari tabel terkait (dengan menetapkan relationname.fieldname), dan menentukan sebuah alias, yang merupakan nama yang akan ditampilkan dalam kontrol datagrid, atau mengakses secara pemrograman kolom.

Tidak ada komentar:

Posting Komentar