آموزش ASP.Net

آموزش ASP.Net - مقیدسازی داده ها (DataBind)

تمامی control های فرم وب ASP.NET تابع DataBind را از کلاس Control پدر خود به ارث می برند. متد نام برده به کنترل web form یک قابلیت ذاتی اعطا می کند که از طریق آن قادر خواهد بود داده به خاصیت های (property) خود متصل کند. از فرایند ذکر شده با نام simple data binding (اتصال ساده ی داده) یا inline data binding (اتصال درون خطی داده) یاد می شود.

Simple data binding  شامل الصاق (متصل) کردن مجموعه آیتم هایی که رابط (interface) IEnumerable  را پیاده سازی می کند یا کلاس های DataSet و DataTable به خاصیت (property) DataSource کنترل مورد نظر می باشد.

از سوی دیگر، برخی از کنترل ها قادر هستند رکورد ها، لیست ها یا ستون هایی از داده را به واسطه ی کنترل DataSource به درون ساختارهایشان متصل کنند. کنترل های ذکر شده از کلاس BaseDataBoundControl مشتق می شوند. از این نوع اتصال داده با نام declarative data binding   (اتصال اعلانی داده) یاد می شود.

کنترل های data source به کنترل های data bound کمک می کنند قابلیت ها و امکاناتی همچون مرتب سازی (sorting)، صفحه بندی (paging) و ویرایش (editing) مجموعه داده ها / data collection را پیاده سازی کنند.

BaseDataBoundControl یک کلاس انتزاعی (abstract class) است که خود توسط دو کلاس انتزاعی دیگر به ارث گرفته می شود، این دو کلاس عبارتند از:

  • DataBoundControl
  • HierarchicalDataBoundControl

کلاس انتزاعی DataBoundControl خود باز توسط دو کلاس انتزاعی دیگر به ارث گرفته می شود:

  • ListControl
  • CompositeDataBoundControl

کنترل هایی که از simple data binding پشتیبانی می کنند در حقیقت از کلاس انتزاعی ListControl مشتق می شوند. این کلاس ها عبارتند از:

  • BulletedList
  • CheckBoxList
  • DropDownList
  • ListBox
  • RadioButtonList

حال کنترل هایی که از declarative data binding (که شکل پیچیده و پیشرفته تری از اتصال داده به شمار می رود) پشتیبانی می کنند خود از کلاس انتزاعی CompositeDataBoundControl مشتق می شوند. کنترل های مزبور عبارتند از:

  • DetailsView
  • FormView
  • GridView
  • RecordList

Simple data binding  (اتصال ساده ی داده)

Simple data binding شامل لیست های گزینش فقط خواندنی / read-only selection list می باشد. این کنترل ها می توانند به فیلدها یا لیست آرایه از پایگاه داده متصل شوند. لیست های گزینش (selection list) دو مقدار از پایگاه یا منبع داده می گیرند؛ یک مقدار توسط خود لیست نمایش داده می شود و دیگری مقداری است که به نمایش (display) مربوط می شود.

برای درک هرچه بهتر این مفهوم به ایجاد یک وب سایت که قابلیت های فوق در آن بکار گرفته می شود خواهیم پرداخت.

ابتدا یک وب سایت ایجاد کنید که فهرست علامت گذاری شده و مرتب (bulleted list) و همچنین کنترل SqlDataSource در آن بکار رفته باشد. کنترل data source را طوری پیکربندی کنید که دو مقدار را از پایگاه داده بازیابی کند.

انتخاب یک منبع داده (data source) برای کنترل bulleted list شامل موارد زیر می شود:

  • انتخاب کنترل data source
  • انتخاب یک فیلد برای نمایش که data field یا فیلد داده خوانده می شود
  • انتخاب یک فیلد ویژۀ مقدار مورد نظر

 

choose data source

حین اجرای application دقت کنید که کل ستون عنوان (title column) به لیست علامت گذاری شده (bulleted list) متصل شده و نمایش داده می شود.

choose data source2

Declarative Data Binding  (اتصال داده به صورت اعلانی)

اگر به مبحث پیشین مراجعه کنید متوجه می شوید که همراه با استفاده از کنترل GridView، قابلیت declarative data binding را نیز پیاده کرده و بکار بردیم. کنترل های data bound مرکب دیگری که قادر هستند داده ها را جدول گونه (tabular) نمایش داده و دستکاری کنند عبارتند از: DetailsView، FormView و RecordList.

در فصل بعدی به تکنولوژی مدیریت پایگاه داده که ADO.NET نامیده می شود نیز خواهیم پرداخت.

فرایند اتصال داده (data binding) شامل اشیا زیر می باشد:

  • یک data set (مجموعه داده) که اطلاعات و داده های بازیابی شده از پایگاه داده را در خود ذخیره می کند.
  • یک data provider (ارائه دهنده ی داده) که به وسیله ی یک دستور (command) از طریق / در طی یک اتصال (connection) داده ها را از پایگاه داده ی مورد نظر بازیابی می کند.
  • Data adapter (به مثابه ی یک پل ارتباطی بین یک منبع داده و یک کلاس داده منفصل یا قطع شده مانند Dataset عمل می کند) که دستور select، ذخیره شده در شئ command را صادر می کند. Data adaptor همچنین قادر است با صدور و استفاده از دستوراتی همچون insert، update و delete اطلاعات موجود در پایگاه داده را بروز رسانی کند.

رابطۀ بین اشیا اتصال داده (data binding objects):

 declarative data binding

مثال

مراحل زیر را دنبال کنید:

مرحلۀ اول: یک وب سایت جدید ایجاد کنید. حال یک کلاس به نام booklist به آن اضافه کنید. می توانید این کار را با راست کلیک روی اسم solution در پنجره ی solution explorer و انتخاب آیتم 'Class' از پنجره ی محاوره ی 'Add Item' انجام دهید. کلاس انتخابی را booklist.cs نام گذاری کنید:

using System;
using System.Data;
using System.Configuration;
using System.Linq;

using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;

using System.Xml.Linq;

namespace databinding
{
   public class booklist
   {
      protected String bookname;
      protected String authorname;
      public booklist(String bname, String aname)
      {
         this.bookname = bname;
         this.authorname = aname;

      }
      
      public String Book
      {
         get
         {
            return this.bookname;
         }
         set
         {
            this.bookname = value;
         }
      }
      
      public String Author
      {
         get
         {
            return this.authorname;
         }
         set
         {
            this.authorname = value;
         }
      }
   }
}

مرحلۀ دوم:  اکنون چهار کنترل به صفحه اضافه کنید: یک list box control، یک radio button list، یک check box list و یک drop down list. سپس چهار label به همراه این لیست کنترل ها به صفحه خود اضافه کنید.

list box control

فایل منبع به شرح زیر است:

<form id="form1" runat="server">
   <div>
   
      <table style="width: 559px">
         <tr>
            <td style="width: 228px; height: 157px;">
               <asp:ListBox ID="ListBox1" runat="server" AutoPostBack="True" 
                  OnSelectedIndexChanged="ListBox1_SelectedIndexChanged">
               </asp:ListBox>
            </td>

            <td style="height: 157px">
               <asp:DropDownList ID="DropDownList1" runat="server" 
                  AutoPostBack="True" OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged">
               </asp:DropDownList>
            </td>             
         </tr>

         <tr>
            <td style="width: 228px; height: 40px;">
               <asp:Label ID="lbllistbox" runat="server"></asp:Label>
            </td>

            <td style="height: 40px">
               <asp:Label ID="lbldrpdown" runat="server">
               </asp:Label>
            </td>
         </tr>

         <tr>
            <td style="width: 228px; height: 21px">
            </td>

            <td style="height: 21px">
            </td>              
         </tr>

         <tr>
            <td style="width: 228px; height: 21px">
               <asp:RadioButtonList ID="RadioButtonList1" runat="server"
                  AutoPostBack="True"  OnSelectedIndexChanged="RadioButtonList1_SelectedIndexChanged">
               </asp:RadioButtonList>
            </td>

            <td style="height: 21px">
               <asp:CheckBoxList ID="CheckBoxList1" runat="server" 
                  AutoPostBack="True" OnSelectedIndexChanged="CheckBoxList1_SelectedIndexChanged">
               </asp:CheckBoxList>
            </td>                
         </tr>

         <tr>
            <td style="width: 228px; height: 21px">
               <asp:Label ID="lblrdlist" runat="server">
               </asp:Label>
            </td>

            <td style="height: 21px">
               <asp:Label ID="lblchklist" runat="server">
               </asp:Label>
            </td>           
         </tr>
      </table>      
      
   </div>
</form>

مرحلۀ سوم:  در مرحله ی آخر به نوشتن code behind routine های اپلیکیشن بپردازید:

public partial class _Default : System.Web.UI.Page
{
   protected void Page_Load(object sender, EventArgs e)
   {
      IList bklist = createbooklist();
      
      if (!this.IsPostBack)
      {
         this.ListBox1.DataSource = bklist;
         this.ListBox1.DataTextField = "Book";
         this.ListBox1.DataValueField = "Author";
         
         this.DropDownList1.DataSource = bklist;
         this.DropDownList1.DataTextField = "Book";
         this.DropDownList1.DataValueField = "Author";
         
         this.RadioButtonList1.DataSource = bklist;
         this.RadioButtonList1.DataTextField = "Book";
         this.RadioButtonList1.DataValueField = "Author";
         
         this.CheckBoxList1.DataSource = bklist;
         this.CheckBoxList1.DataTextField = "Book";
         this.CheckBoxList1.DataValueField = "Author";
         
         this.DataBind();
      }
   }
   
   protected IList createbooklist()
   {
      ArrayList allbooks = new ArrayList();
      booklist bl;
      
      bl = new booklist("UNIX CONCEPTS", "SUMITABHA DAS");
      allbooks.Add(bl);
      
      bl = new booklist("PROGRAMMING IN C", "RICHI KERNIGHAN");
      allbooks.Add(bl);
      
      bl = new booklist("DATA STRUCTURE", "TANENBAUM");
      allbooks.Add(bl);
      
      bl = new booklist("NETWORKING CONCEPTS", "FOROUZAN");
      allbooks.Add(bl);
      
      bl = new booklist("PROGRAMMING IN C++", "B. STROUSTROUP");
      allbooks.Add(bl);
      
      bl = new booklist("ADVANCED JAVA", "SUMITABHA DAS");
      allbooks.Add(bl);
      
      return allbooks;
   }
   
   protected void ListBox1_SelectedIndexChanged(object sender, EventArgs e)
   {
      this.lbllistbox.Text = this.ListBox1.SelectedValue;
   }
   
   protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
   {
      this.lbldrpdown.Text = this.DropDownList1.SelectedValue;
   }
   
   protected void RadioButtonList1_SelectedIndexChanged(object sender, EventArgs e)
   {
      this.lblrdlist.Text = this.RadioButtonList1.SelectedValue;
   }
   
   protected void CheckBoxList1_SelectedIndexChanged(object sender, EventArgs e)
   {
      this.lblchklist.Text = this.CheckBoxList1.SelectedValue;
   }
}

به مسائل زیر توجه کنید:

  • کلاس booklist دارای دو خاصیت می باشد: bookname و authorname
  • تابع createbooklist یک متد user-defined (تعریف شده توسط کاربر) می باشد که آرایه ای از اشیا booklist به نام allbooks ایجاد می کند.
  • مدیریت کننده ی رخداد (event handler) Page_Load فهرستی از کتاب ها ایجاد می کند. لیست مورد نظر از نوع IList است . این لیست رابط (interface) IEnumerable را پیاده سازی کرده و توانایی متصل بودن به کنترل های list را دارا می باشد. مدیریت کننده ی رخداد Page_Load شئ IList 'bklist' را به کنترل های list متصل می کند. خاصیت (property) bookname نمایش داده شده و خاصیت authorname مقدار درنظر گرفته می شود.
  • هنگامی که صفحه اجرا می شود، اگر کاربر یک کتاب انتخاب کند، اسم کتاب مورد نظر انتخاب شده و در کنترل های list نمایش داده می شود در حالی که label های مربوطه اسم نویسنده ی کتاب را نمایش می دهند.

data binding result

در صورتی که سوال و یا نظری دارید، از بخش نظرات با ما در میان بگذارید.

خبـرنــامه

Newsletters

در خبــرنـامه سافت اسکیل عضو شویــد تا جدیدترین هـای سایت را بلافاصله در ایمیل خـود دریافت کنیـد

شما چه نظر و یا سوالی درباره این نوشته دارید؟

مبحث آموزشی

آموزش ASP.Net

Learn ASP.Net

سرفصل ها

پرســیدن سؤال جدید

سؤال های تخصصی خود را از ما بپرسید

دنبال کردن تلگرام کانال سافت اسکیل

https://telegram.me/softskill_ir

عملیات کاربران

خبـرنــامه

Newsletters

در خبــرنـامه سافت اسکیل عضو شویــد تا جدیدترین هـای سایت را بلافاصله در ایمیل خـود دریافت کنیـد

کلیک کنید و سوالات خود را از ما بپرسید
لطفا فرم سوال را پر کنید

سوال شما با موفقیت ثبت شد. برای اینکه بتوانیم به شما اطلاع رسانی کنیم، موارد زیر را وارد کنید:

لطفا چند لحظه منتظر بمانید ...