Data Binding буюу єгєгдєл бэхлэх (Visual Basic .NET)

 

 

Єгєгдєл бэхлэх (Data binding) нь єгєгдлийн эхийг vvсгэх процесстой холбоотой ба автоматаар форм дээрх контролуудыг єгєгдлийн эхээр хангаж байдаг. Windows формууд єгєгдєл бэхлэлтийг хийж гvйцэтгэхдээ ADO.NET-тэй холбогдож ашигладаг. Та єгєгдєл бэхлэх vед холболт хийх, dataset vvсгэх зэрэг код бичих шаардлаггvй ба .NET framework єєрєє ADO.NET-д хэрэгтэй кодыг vvсгэдэг. Формыг єгєдєлтэй бэхлэсний дараа, форм дээрх контролуудыг єгєгдлийн тодорхой эльментvvдтэй бэхлэж чадна. Ихэнхи vед TextBox контролын Text property-г єгєгдлийн эхийн нэг баганатай бэхлэдэг билээ. Мєн Picturebox контролын зурагуудыг, контролын background болон бусад property-нуудыг бэхлэж болно.
Єгєгдєл бэхлэлтийг Энгийн єгєгдєл бэхлэх, Комплекс єгєгдєл бэхлэх гэсэн 2 тєрєл байдаг.
Энгийн єгєгдєл бэхлэх нь контрол руу дан элемент бэхлэхийг зєвшєєрдєг. Жишээ нь TextBox, Label контролуудыг єгєгдєлтэй бэхлэлт хийх.
Комплекс єгєгдєл бэхлэх нь контрол руу нэгээс их элемент бэхлэхийг зєвшєєрдєг. Комплекс єгєгдєл бэхлэхийг зєвшєєрдєг контролуудад DataGrid, ComboBox, ListBox гэх мэт контролууд орно.

 

Єгєгдлийг DataGrid-рvv бэхлэх

Єгєгдєл бэхлэхэд хэрэглэгдэх vндсэн чанарууд нь .NET-н орчинд хvснэгтийг Grid-д харуулахад илэрдэг. Ингээд хэрхэн DataGrid бvхий форм vvсгэн, єгєгдлийн баазтай холбох жишээ vзье. Эхлээд vндсэн алхмуудыг тодорхойлъё:

  1. Windows Form байгуулах
  2. DataSet-ийг vvсгэх болон бэлтгэх
  3. DataGrid контролыг форм руу нэмээд, єгєгдєл рvv бэхэлнэ.

 

Windows Form байгуулах:

Доорх алхмуудыг даган хийснээр жишээний формоо байгуулах болно.

  1. Visual Studio.NET–ийг нээж, New Project товчлуурыг сонгон
  2. Windows Application-ийг Template-ээс сонгон, Name textbox-д DataBinding гэж нэр єгєн прожектоо vvсгэнэ.
  3. Properties цонхон дах формын property-нуудаас Name property-д frmProducts, Text property-д Product Information.оноож єгнє.

 

DataSet-ийг vvсгэх болон бэлтгэх

-DataAdapter Wizard-ийг хэрэглэх

Єгєгдлийн баазтай холболт хийхийн тулд OleDbDataAdapter component-ийг Toolbox цонхны Data tab-аас сонгон форм руу чирэх эсвэл давхар товшилт хийнэ. Энэ нь хэдэн алхам бvхий тохируулганы цонх дэлгэцэнд гаргана. DataAdapter нь єгєгдлийн баазаас єгєгдєл дамжуулах ба DataSet нь DataGrid-ийг бэхлэхэд хэрэглэгддэг билээ.

  1. OleDbDataAdapter-ийг Toolbox цонхний Data tab-аас сонго
  2. Тvvнийг форм руу чирээд орхих
  3. Data Adapter Configuration Wizard цонх гарч ирэх болно.
  4. Эхний дэлгэц нь мэдээлэлийн чанартай тул “Next” товч дарна.
  5. Дараагийн дэлгэцэнд та єєрийн хэрэглэх єгєгдлийн холболтыг хийж єгнє.
  6. DataConnection тодорхойлох дэлгэц

    Хэрэв та New Connection товчлуурыг сонговол дараах дэлгэц гарч ирэх болно. Энэ дэлгэцнээс та data provider-ыг сонгох ба data provider-т хэрэгтэй мэдээлэлvvдийг бєглєх болно.

    New Connection товчлуур дарахад гарч ирэх дэлгэц

    1. Та єєрийн хэрэглэх гэж буй SQL server-ийн нэрийг сонгоно. Энэ жишээнд (local) гэж сонгосон байна.
    2. SQL server лvv холбогдоход шаардлагатай мэдээллийг (хэрэглэгчийн нэр, пасспорт) оруулна.
    3. Northwind єгєгдлийн баазыг сонгоно. Энэ баазын Product хvснэгтээс бид мэдээлэл авах болно.

    Жич: Хэрэв та MSAccess хэрэглэх гэж буй бол Provider tab-аас Microsoft Jet 4.0 OLE DB Provider сонгон, Connection tab-д єгєгдлийн баазын нэрийг сонгож єгнє.

  7. Wizard-ын дараагийн алхамд Query Type сонгоход хэрэгтэй болно. Та vvнээс: Use SQL Statement–ийг сонгон цааш vргэлжлvvлнэ.
  8. QueryType зураг

  9. Энэ дэлгэцэнд SQL мэдэгдэл бичих эсвэл Query Builder-ийг сонгон SQL мэдэгдлvvдийг байгуулж болно. Энэ жишээний хувьд дараах SQL мэдэгдлийг бичлээ.
    	SELECT ProductID, ProductName, UnitPrice, UnitsInStock
    	FROM Products
    
  10. “Next” товчыг дарснаар энэхvv wizard-ийн тєгсгєлийн алхам руу очих ба “Finish” товчоор vйл явцыг дуусганаа. Vvний vр дvнд OleDbConnection1, OleDbDataAdapter1 объектууд Tray цонхон дээр нэмэгдсэн байх болно.

Жич: Энэ жишээнд OleDbDataAdapter-ийг ашигласан. Хэрэв та зєвхєн SQL Server ашиглах бол Sql* component-уудыг ашиглавал илvv vр дvнтэй байх болно.

 

-DataSet класс vvсгэх

Visual Studio.NET-д ємнє нь vvсгэсэн DataAdapter объектын query-д суурилан Dataset классыг vvсгэхэд маш хялбар байдаг. Dataset классыг vvсгэхдээ дараах алхмуудыг хэрэглэнэ.

  1. Data ->Generate Dataset коммандыг VS.NET цэснээс сонгоно.
  2. Generate Dataset гэсэн диалог цонх дэлгэцэнд гарч ирнэ.
  3. “New” option button-ийг сонгон, dsProducts гэсэн нэр єгнє.
  4. “OK” товчлуурыг дарснаар DataSet бvдvvвч тодорхойлолт бvхий файл ба класс зэргийг vvсгэнэ.

DataSet vvсгэх

Эдгээр алхмуудыг гvйцэтгэсний дараа dsProducts1 контрол формын Tray дээр нэмэгдэх ба энэ контрол нь dsProducts.xsd файлыг зааж байдаг. dsProducts.xsd файл нь таны ємнє нь тодорхойлсон SQL мэдэгдлээс vvссэн хvснэгт, багануудыг агуулсан XML бvдvvвч тодорхойлолт юм.

 

DataGrid-ийг єгєгдлєєр дvvргэх

Юуны ємнє та DataGrid контролыг frmProducts формдоо байрлуулана. Уг контролыг сонгон Property цонхон дах DataSource property-д dsProducts1, DataMember property-д Products тус тус оноож єгнє.

Одоо бид DataGrid контролыг DataSet рvv бэхлэсэн байгаа боловч DataSet нь форм ачаалагдахад автоматаар єгєгдлєєр дvvргэгддэггvй. Иймд форм Load event-д дараах кодыг бичиж єгнє.

   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-уудтай ажиллах

Бидний vvсгэсэн жишээ багахан хэмжээний єгєгдєлтэй vед тєвєггvй ажиллах боловч хэдэн мянган бичлэгтэй vед тийм ч тохиромжтой биш байх болно. Тиймд бvтээгдэхvvний тєрлийг combo box-оос сонгон, тухайн тєрлийн бvтээгдэхvvнvvдийг дэлгэцэнд DataGrid дээр харуулбал илvv тохиромжтой. Эхлээд combo box-ийг єгєгдлєєр дvvргээд, дараа нь combo box-ийг хэрэглэн дэлгэцэнд data grid-д харагдах єгєгдлийг хязгаарлая.

Хоёр дох Data Adapter, DataSet нэмэх

  1. Дахин OleDbDataAdapter-ийг Toolbox-ийн Data tab-аас сонгон, форм дээр байрлуулна.
  2. <Ємнєх жишээнд хэрэглэж байсан Northwind єгєгдлийн баазын холболтыг хэрэглэнэ. “Next” товч дарна.
  3. “Use SQL Statements”-ийг сонгон, “Next” товч дарна.
  4. Дараах SQL мэдэгдлийг бичнэ:
    SELECT CategoryID, CategoryName FROM Categories
  5. Энэ диалогоос “Advanced Options” товчлуурыг сонгоно.
  6. “Generate Insert, Update, and Delete statements” сонголтыг арилгана. Учир нь бид зєвхєн combo box дvvргэх гэж байгаа тул эдгээр коммандуудыг хэрэглэх шаардлагагvй.

“Finish” товчыг дарснаар OleDbDataAdapter-ыг vvсгэнэ.
Одоо Data ->Generate Dataset коммандыг VS.NET цэснээс сонгон, DataSet-ийн нэрийг dsCat гэж єгнє vv.

Combo Box-ыг DataAdapter луу бэхлэх

  1. Формд Combo box байрлуулан, идэвжvvл
  2. Name property-д cboCategories
  3. DataSource property-д dsCat1
  4. DropDownStyle property-д DropDownList
  5. DisplayMember property-д Categories.CategoryName. Энэ нь дэлгэцэнд харагдах багана ба data grid контролын єгєгдлийг єєрчлєхєд хэрэглэгдэх багана утгаа авахад туслана.
  6. ValueMember property-д Categories.CategoryID онооно. ValueMember property нь item сонгогдоход жинхэнэ утгыг авна. єєрєєр хэлбэл CategoryName сонгогдоход харгалзах CategoryID-г энэ property-гоос авч чадна.

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р зураг харагдах болно.

 ComboBox-ыг хэрэглэсэн форм

 

Параметртай Query vvсгэх

Одоо бvгдээрээ тєрєл сонгогдоход data grid дээр харгалзах бvтээгдэхvvнvvдийг харуулж чаддаг болъё.

  1. Data grid контролыг єгєгдєлжvvлдэг кодыг формын Load event-ээс хасна.
    Дараах кодыг формын Load event-ээс хасна уу.
       dsProducts1.Clear()
       OleDbDataAdapter1.Fill(dsProducts1, "Products")
    
  2. OleDbDataAdapter1 объектын SelectCommand property-г єєрчлєн, CategoryID параметр авах боломжтой болгоно. OleDbDataAdapter1 объектыг сонгон Properties window (F4) дах SelectCommand property-гийн дэд property-нуудыг дэлгэнэ. CommandText property-г сонгон, Build (…) товчлуурыг дарснаар дэлгэцэнд Query Builder диалог гарч ирэх болно. WHERE буюу нєхцлийг нэмснээр дараах байдалтай харагдах болно.
       SELECT ProductID, ProductName, UnitPrice, UnitsInStock
       FROM Products
       WHERE CategoryID = ?
    
    OK товчлуурыг дарснаар єєрчлєлт маань хадгалагдах болно.

    OleDbDataAdapter1 объектыг сонгон Data -> Generate Dataset менюг сонгон, Ok товчлуурыг дарснаар одоо байгаа dsProducts dataset-ээ дахин байгуулалт хийнэ.

  3. Хэрэглэгч combo box-оос item сонгоход ажиллах код нэмэх
    Эхлээд 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-д автоматаар байрлана.

Хэрэв та бvх vйлдлийг зєв хийсэн бол F5 товч даран прожектоо ажиллуулаад combo box-оос тєрлийн нэр сонгон, datagrid харгалзах єгєгдлєєр дvvргэгдэж байхыг харах болно.

 

Єгєгдлийг гараас бэхлэх

Ямар нэгэн Wizard хэрэглэхгvйгээр DataSet класс vvсгэн, Data grid болон бусад контролыг єгєгдлєєр дvvргэж болох ба энэ аргыг хэрэглэснээр маш уян хатан, илvv хурдан ажиллах программ хийх болно. Одоо ємнєх жишээтэй ижил прожект vvсгэе.

  1. Та дахин шинэ DataBindGrid гэсэн прожект vvсгэнэ.
  2. frmProducts гэсэн форм vvсгэнэ vv.
  3. Label, ComboBox, DataGrid контролуудыг формд нэмнэ.
  4. Тэдний нэрийг харгалзан Label1, cboCategories, grdProducts гэж єєрчлєнє.
  5. Формын Load event-д дараах кодыг бичнэ.
   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” гэж бичээрэй.

DisplayMember, ValueMember property-нуудад SQL мэдэгдэлд буй багануудын нэрийг єгєх ёстой. DisplayMember нь combo box-ийн дэлгэцэнд харагдах єгєгдлvvдийг авах баганыг зааж байдаг. Харин ValueMember property нь єєр баганы утгыг хадгалж байдаг combo box-ийн vл харагдах жагсаалт юм.

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

 

Connection ба Command Объектууд | дээшээ | DataReader Объект
нvvр хуудас