Єгєгдєл бэхлэх (Data binding) нь єгєгдлийн эхийг vvсгэх процесстой холбоотой ба автоматаар форм дээрх контролуудыг єгєгдлийн эхээр хангаж байдаг. Windows формууд єгєгдєл бэхлэлтийг хийж гvйцэтгэхдээ ADO.NET-тэй холбогдож ашигладаг. Та єгєгдєл бэхлэх vед холболт хийх, dataset vvсгэх зэрэг код бичих шаардлаггvй ба .NET framework єєрєє ADO.NET-д хэрэгтэй кодыг vvсгэдэг. Формыг єгєдєлтэй бэхлэсний дараа, форм дээрх контролуудыг єгєгдлийн тодорхой эльментvvдтэй бэхлэж чадна. Ихэнхи vед TextBox контролын Text property-г єгєгдлийн эхийн нэг баганатай бэхлэдэг билээ. Мєн Picturebox контролын зурагуудыг, контролын background болон бусад property-нуудыг бэхлэж болно.
Єгєгдєл бэхлэхэд хэрэглэгдэх vндсэн чанарууд нь .NET-н орчинд хvснэгтийг Grid-д харуулахад илэрдэг. Ингээд хэрхэн DataGrid бvхий форм vvсгэн, єгєгдлийн баазтай холбох жишээ vзье. Эхлээд vндсэн алхмуудыг тодорхойлъё:
Доорх алхмуудыг даган хийснээр жишээний формоо байгуулах болно.
Єгєгдлийн баазтай холболт хийхийн тулд OleDbDataAdapter component-ийг Toolbox цонхны Data tab-аас сонгон форм руу чирэх эсвэл давхар товшилт хийнэ. Энэ нь хэдэн алхам бvхий тохируулганы цонх дэлгэцэнд гаргана. DataAdapter нь єгєгдлийн баазаас єгєгдєл дамжуулах ба DataSet нь DataGrid-ийг бэхлэхэд хэрэглэгддэг билээ.
Хэрэв та New Connection товчлуурыг сонговол дараах дэлгэц гарч ирэх болно. Энэ дэлгэцнээс та data provider-ыг сонгох ба data provider-т хэрэгтэй мэдээлэлvvдийг бєглєх болно.
Жич: Хэрэв та MSAccess хэрэглэх гэж буй бол Provider tab-аас Microsoft Jet 4.0 OLE DB Provider сонгон, Connection tab-д єгєгдлийн баазын нэрийг сонгож єгнє.
Жич: Энэ жишээнд OleDbDataAdapter-ийг ашигласан. Хэрэв та зєвхєн SQL Server ашиглах бол Sql* component-уудыг ашиглавал илvv vр дvнтэй байх болно.
Visual Studio.NET-д ємнє нь vvсгэсэн DataAdapter объектын query-д суурилан Dataset классыг vvсгэхэд маш хялбар байдаг. Dataset классыг vvсгэхдээ дараах алхмуудыг хэрэглэнэ.
Эдгээр алхмуудыг гvйцэтгэсний дараа dsProducts1 контрол формын Tray дээр нэмэгдэх ба энэ контрол нь dsProducts.xsd файлыг зааж байдаг. dsProducts.xsd файл нь таны ємнє нь тодорхойлсон SQL мэдэгдлээс vvссэн хvснэгт, багануудыг агуулсан XML бvдvvвч тодорхойлолт юм.
Юуны ємнє та DataGrid контролыг frmProducts формдоо байрлуулана. Уг контролыг сонгон Property цонхон дах DataSource property-д dsProducts1, DataMember property-д Products тус тус оноож єгнє.
Одоо бид DataGrid контролыг DataSet рvv бэхлэсэн байгаа боловч DataSet нь форм ачаалагдахад автоматаар єгєгдлєєр дvvргэгддэггvй. Иймд форм Load event-д дараах кодыг бичиж єгнє.
Бидний vvсгэсэн жишээ багахан хэмжээний єгєгдєлтэй vед тєвєггvй ажиллах боловч хэдэн мянган бичлэгтэй vед тийм ч тохиромжтой биш байх болно. Тиймд бvтээгдэхvvний тєрлийг combo box-оос сонгон, тухайн тєрлийн бvтээгдэхvvнvvдийг дэлгэцэнд DataGrid дээр харуулбал илvv тохиромжтой. Эхлээд combo box-ийг єгєгдлєєр дvvргээд, дараа нь combo box-ийг хэрэглэн дэлгэцэнд data grid-д харагдах єгєгдлийг хязгаарлая.
Одоо бvгдээрээ тєрєл сонгогдоход data grid дээр харгалзах бvтээгдэхvvнvvдийг харуулж чаддаг болъё.
OleDbDataAdapter1 объектыг сонгон Data -> Generate Dataset менюг сонгон, Ok товчлуурыг дарснаар одоо байгаа dsProducts dataset-ээ дахин байгуулалт хийнэ.
Ямар нэгэн Wizard хэрэглэхгvйгээр DataSet класс vvсгэн, Data grid болон бусад контролыг єгєгдлєєр дvvргэж болох ба энэ аргыг хэрэглэснээр маш уян хатан, илvv хурдан ажиллах программ хийх болно. Одоо ємнєх жишээтэй ижил прожект vvсгэе.
DisplayMember, ValueMember property-нуудад SQL мэдэгдэлд буй багануудын нэрийг єгєх ёстой. DisplayMember нь combo box-ийн дэлгэцэнд харагдах єгєгдлvvдийг авах баганыг зааж байдаг. Харин ValueMember property нь єєр баганы утгыг хадгалж байдаг combo box-ийн vл харагдах жагсаалт юм.
Connection ба Command Объектууд | дээшээ | DataReader Объект Windows Form байгуулах:
DataSet-ийг vvсгэх болон бэлтгэх
-DataAdapter Wizard-ийг хэрэглэх
Use SQL Statement–ийг сонгон цааш vргэлжлvvлнэ.
SELECT ProductID, ProductName, UnitPrice, UnitsInStock
FROM Products
-DataSet класс vvсгэх
DataGrid-ийг єгєгдлєєр дvvргэх
Private Sub frmProducts_Load( ByVal sender As System.Object, ByVal e As System.EventArgs) _
Handles MyBase.Load
' DataSet контролыг хоослох
dsProducts1.Clear()
' DataSet контролыг Products хvснэгтээс єгєгдлєєр дvvргэх
OleDbDataAdapter1.Fill(dsProducts1, "Products")
End Sub
Ингээд бид DataGrid контролыг дvvргэж чадах боллоо. Та одоо прожектоо ажиллуулан (F5) шалгаж vзнэ vv. Combo Box-уудтай ажиллах
Хоёр дох Data Adapter, DataSet нэмэх
SELECT CategoryID, CategoryName FROM Categories
“Finish” товчыг дарснаар OleDbDataAdapter-ыг vvсгэнэ.
Одоо Data ->Generate Dataset коммандыг VS.NET цэснээс сонгон, DataSet-ийн нэрийг dsCat гэж єгнє vv. Combo Box-ыг DataAdapter луу бэхлэх
Combo Box-ыг єгєгдєлтэй болгох
Combo Box-ыг єгєгдєлтэй болгохын тулд ємнє нь Grid-ийг єгєгдлєєр дvvргэхэд хэрэглэж байсан Load event дээр зарим код бичнэ.
Private Sub frmProducts_Load( ByVal sender As System.Object, ByVal e As System.EventArgs) _
Handles MyBase.Load
dsProducts1.Clear()
OleDbDataAdapter1.Fill(dsProducts1, "Products")
' Combo Box-д єгєгдєл дvvргэхэд хэрэглэгдэн DataSet-ыг бэлтгэх
dsCat1.Clear()
OleDbDataAdapter2.Fill(dsCat1, "Categories")
End Sub
Ингээд ComboBox-ыг єгєгдлєєр дvvргэх ажил маань дууслаа. :-)
Одоо та F5 товч даран формоо ажиллуулахад дараах дvр зураг харагдах болно.
Параметртай Query vvсгэх
Хэрэв та бvх vйлдлийг зєв хийсэн бол F5 товч даран прожектоо ажиллуулаад combo box-оос тєрлийн нэр сонгон, datagrid харгалзах єгєгдлєєр дvvргэгдэж байхыг харах болно.
Дараах кодыг формын Load event-ээс хасна уу.
dsProducts1.Clear()
OleDbDataAdapter1.Fill(dsProducts1, "Products")
SELECT ProductID, ProductName, UnitPrice, UnitsInStock
FROM Products
WHERE CategoryID = ?
OK товчлуурыг дарснаар єєрчлєлт маань хадгалагдах болно.
Эхлээд cboCategories combo box дээр давхар товшилт хийн, SelectedIndexChanged event процедур vvсгэнэ. Энэ event нь combo box-оос item сонгох vед vvсдэг. Ингээд дараах кодыг бичнэ vv.
Private Sub cboCategories_SelectedIndexChanged( ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles cboCategories.SelectedIndexChanged
With OleDbDataAdapter1.SelectCommand.Parameters
.Item(0).Value = cboCategories.SelectedValue
End With
' dataset-ийг цэвэрлэх
DsProducts1.Clear()
' dataset-ийг параметрын утгыг хэрэглэх єгєгдєлжvvлэх
OleDbDataAdapter1.Fill(DsProducts1, "Products")
End Sub
Data adapter-ийн SelectCommand объектыг ашиглан тухайн Parameter объектыг дамжуулахад хэрэглэж байна. Энэ Parameter объектын Value property-д оноож буй combo box-ийн SelectedValue property нь ValueMember-ийн идэвхтэй байгаа утга (CategoryID)-г авна. Combo box-оос нэр сонгоход dataset нь тухайн тєрлєєр дvvргэгдэн, data grid-д автоматаар байрлана.
Єгєгдлийг гараас бэхлэх
Private Sub frmProducts_Load( ByVal sender As System.Object, ByVal e As System.EventArgs) _
Handles MyBase.Load
Call ComboLoad()
End Sub
ComboLoad event нь cboCategories combo box-ийг DataTable классаас єгєгдлєєр дvvргэнэ.
Private Sub ComboLoad()
Dim da As OleDb.OleDbDataAdapter
Dim dt As DataTable = New DataTable()
Dim strSQL As String
Dim strConn As String
strConn = "Provider=sqloledb;Data
Source=(local);Initial Catalog=Northwind;User ID=sa"
strSQL = "SELECT CategoryId, CategoryName "
strSQL &= "FROM Categories"
Try
‘Data adapter vvсгэх
da = New OleDb.OleDbDataAdapter(strSQL, strConn)
‘DataTable-ийг єгєгдлєєр дvvргэх
da.Fill(dt)
With cboCategories
' эхлээд Property-нуудад утга онооно
.DisplayMember = "CategoryName"
.ValueMember = "CategoryId"
' тэгээд DataSource-ийг єгнє
.DataSource = dt
End With
Catch e As Exception
MessageBox.Show(e.Message)
End Try
End Sub
Жич: Хэрэв та Access єгєгдлийн бааз ашиглаж байгаа бол strConn тэмдэгт мєрєнд
“Provider=Microsoft.Jet.OLEDB.4.0;Password="""";User ID=Admin;Data Source=C:\Program Files\Microsoft Office\Office\Samples\Northwind.mdb” гэж бичээрэй. DataGrid-ийг дvvргэх
Combo box-ын SelectedIndexChanged event-д дараах кодыг бичье:
Private Sub cboCategories_SelectedIndexChanged( ByVal sender As System.Object, ByVal e As _
System.EventArgs) Handles cboCategories.SelectedIndexChanged
Call GridLoad()
End Sub
GridLoad процедур нь combo box-оос сонгосон утгаар Grid-ийг дvvргэнэ.
Private Sub GridLoad()
Dim da As OleDb.OleDbDataAdapter
Dim dt As DataTable = New DataTable()
Dim strSQL As String
Dim strConn As String
strConn = "Provider=sqloledb;Data Source=(local);Initial Catalog=Northwind;User ID=sa"
strSQL = "SELECT ProductID, ProductName, UnitPrice, UnitsInStock "
strSQL &= "FROM Products "
strSQL &= "WHERE CategoryID = " & cboCategories.SelectedValue
Try
‘Data adapter vvсгэх
da = New OleDb.OleDbDataAdapter(strSQL, strConn)
‘DataTable-ийг єгєгдлєєр дvvргэх
da.Fill(dt)
grdProducts.PreferredColumnWidth = DataGrid.AutoColumnSize
grdProducts.DataSource = dt
Catch e As Exception
MessageBox.Show(e.Message)
End Try
End Sub
нvvр хуудас