جستجو در محصولات

گالری پروژه های افتر افکت
گالری پروژه های PSD
جستجو در محصولات


تبلیغ بانک ها در صفحات
ربات ساز تلگرام در صفحات
ایمن نیوز در صفحات
.. سیستم ارسال پیامک ..
تفاوت بين DataList ، DataGrid و Repeater
-(5 Body) 
تفاوت بين DataList ، DataGrid و Repeater
Visitor 1789
Category: دنياي فن آوري
ASP.NET داراي مزاياي متعددي نسبت به ASP کلاسيک است . يکي از مزاياي فوق ، ارائه کنترل هاي سرويس دهنده متعددي در ارتباط با داده ها است که از آنان با نام Data Web control و يا Display Data Server Control ياد مي شود . کنترل هاي فوق با هدف تسهيل در امر نمايش داده ها طراحي شده اند . مثلا" DataGrid يک کنترل ايده آل به منظور نمايش داده در يک جدول با فرمت HTML است . علاوه بر کنترل DataGrid از دو کنترل داده ديگر به اسامي DataList و Repeater استفاده مي گردد :
• DataGrid
• DataList
• Repeater
کنترل هاي فوق در موارد متعددي مشابه يکديگر مي باشند . مثلا" گرامر استفاده شده به منظور نسبت دهي داده به کنترل ها ، وجود خصلت و رويدادهاي مشابه نمونه هائي در اين زمينه مي باشد . عليرغم وجود برخي شباهت ها بين کنترل هاي فوق ، هر يک از آنان داراي مزايا و محدوديت هاي مختص به خود مي باشند . برنامه نويسان برنامه هاي وب که از ASP.NET استفاده مي نمايند و درگير طراحي و پياده سازي برنامه هاي وب با محوريت داده مي باشند ، در زمان استفاده از کنترل هاي فوق دچار سردرگمي شده و همواره با اين پرسش مواجه هستند که کدام کنترل مناسب تر است ؟ انتخاب مناسب يک کنترل داده به نوع عملياتي که قصد انجام آنان را در يک برنامه وب داريم ، بستگي خواهد داشت .
در اين مقاله قصد داريم به بررسي نقاط قوت و محدوديت هاي هر يک از کنترل هاي فوق پرداخته و حالات خاصي را بررسي نمائيم که جايگاه و ضرورت استفاده از کنترل مورد نظر را مشخص مي نمايد . در ابتدا و در بخش اول اين مقاله به بررسي نقاط مشترک بين کنترل هاي داده وب خواهيم پرداخت و قدرمشترک بين آنان را مشخص مي نمائيم .

نقاط مشترک بين کنترل هاي داده

مهمترين وجه اشتراک بين کنترل هاي DataGrid ، DataList و Repeater ، استفاده از خصلتي با نام DataSource و يک متد با نام DataBind است . به منظور نسبت دهي داده به هر يک از کنترل هاي فوق از فرآيند مشابهي استفاده مي گردد :
• نسبت دهي داده هائي که مي بايست نمايش داده شوند به خصلت DataSource
• فراخواني متد DataBind
يکي ديگر از نقاط مشترک بين کنترل هاي فوق ، بکارگيري تعداد مشخصي از DataWebControlNameItems است . يک DataGrid از تعدادي DataGridItems ، يک DataList از تعدادي DataListItems و يک Repeater از تعدادي RepeaterItems تشکيل مي گردد . پس از فراخواني متد DataBind ، در مجموعه رکوردهاي موجود در DataSource حرکت نموده و براي هر يک از آنان يک نمونه جديد DataWebControlNameItem ايجاد و به کنترل اضافه مي گردد . پس از ايجاد يک نمونه DataWebControlNameItem ، به خصلت DataItem آن مقدار مربوط به رکورد جاري DataSource نسبت داده شده و متد DataBind مربوط به DataWebControlNameItem فراخوانده شده تا ستون ها ي مربوط به رکورد Datasource به DataWebControlNameItem نسبت داده مي شوند . ( در اين رابطه تفاوت اندکي بين سه کنترل اشاره شده وجود دارد که در ادامه به بررسي آنان خواهيم پرداخت ) . علاوه بر وجود شباهت هاي فوق ، کنترل هاي فوق از سه رويداد مشابه نيز استفاده مي نمايند :
• ItemCreated : رويداد فوق يک مرتبه به ازاي هر DataWebControlNameItem که به کنترل اضافه مي گردد ، فعال مي گردد . فعال شدن رويداد فوق قبل از نسبت دهي خصلت DataItem مربوط به DataWebControlNameItem مي باشد .
• ItemDataBound : رويداد فوق نيز يک مرتبه به ازاي هر DataWebControlNameItem که به کنترل اضافه مي گردد، فعال مي شود ولي زمان فعال شدن آن پس از نسبت دهي خصلت DataItem مربوط به DataWebControlNameItem خواهد بود .
• ItemCommand : رويداد فوق هر مرتبه که رويداد Command براي يک Button و يا LinkButton موجود در کنترل فعال مي شود ، اجراء مي گردد .

بررسي عملي وجه اشتراک بين سه کنترل داده

به منظور بررسي نقاط مشترک بين هر يک از کنترل هاي اشاره شده يک مثال عملي را دنبال مي نمائيم . در اين مثال قصد داريم محتويات جدول Srcotable بانک اطلاعاتي SrcoTestDB.mdb را در خروجي نمايش دهيم . جدول فوق داراي سه فيلد اطلاعاتي با نام ArticlesName ، ArticlesDescription و ID است .
مرحله اول : ايجاد بانک اطلاعاتي SrcoTestDB.mdb و جدول Srcotable
مرحله دوم : ايجاد يک صفحه وب ASP.NET با نام TestWebDataControl.aspx و استفاده از کنترل DataGrid و مشخص نمودن فرمت مورد نظر براي نمايش داده هاي موجود در بانک اطلاعاتي

<form runat="server" >
<asp:DataGrid id="SrcoGrid1" runat="server"
  
   AutoGenerateColumns="False"
   Font-Names="Tahoma"
   Font-Size="8pt"
   CellPadding="1"
   GridLines="Horizontal"
   BorderWidth="3"
   BackColor="#F0F0F0"
   ForeColor="Black"
   ShowFooter="True"
   HeaderStyle-BackColor="#707070"
   HeaderStyle-ForeColor="#FFFFFF"
   HeaderStyle-Font-Bold="True"
   HeaderStyle-HorizontalAlign="Center"
   AlternatingItemStyle-ForeColor="Navy"
   AlternatingItemStyle-BackColor="#CCCC99"
   FooterStyle-BackColor="#336699"
   FooterStyle-ForeColor="#FFFFFF"
   FooterStyle-HorizontalAlign="Left"
   FooterStyle-Font-Bold="True" >
 <Columns>
   <asp:BoundColumn
      DataField="ArticlesName"
      HeaderText="عنوانمقاله" />

    <asp:BoundColumn
       DataField="ArticlesDescription"
       HeaderText="شرح"
       ItemStyle-HorizontalAlign="Right"
       FooterText="تهيه شده در شرکتسخاروش"
      FooterStyle-Font-Size="8pt" />

</Columns>

</asp:DataGrid>
</form>

مرحله سوم : ايجاد و نسبت دهي يک DataSet از طريق Page_Laod

<%@ Import Namespace="System.Data.OleDb" %>

<SCRIPT runat="server">

Dim DBConnection As OleDbConnection
Dim DBCommand As OleDbCommand
Dim DBReader As OleDbDataReader
Dim SQLString As String

Sub Page_Load
  If Not Page.IsPostBack Then

   DBConnection = New OleDbConnection( "Provider=Microsoft.Jet.OLEDB.4.0;" & _
    "Data Source=C:\InetPub\wwwRoot\SrcoTestDB.mdb")
     DBConnection.Open()
     SQLString = "SELECT * FROM Srcotable Order by id DESC "
     DBCommand = New OleDbCommand(SQLString, DBConnection)
     DBReader = DBCommand.ExecuteReader()
     SrcoGrid1.DataSource = DBReader
     SrcoGrid1.DataBind()
    DBReader.Close()
    DBConnection.Close()

  End If

End Sub

</SCRIPT>

توضيحات :

پس از فراخواني متد DataBind ، رکوردهاي مربوط به DataSet نسبت داده شده به خصلت DataSource استخراج مي گردند . در زمان حرکت در DataSet ، در حقيقت در بين مجموعه اي از سطرهاي مربوط به DataTable پيش فرض DataSet حرکت مي نمائيم . مجموعه Rows شامل تعدادي از نمونه هاي DataRow است که براي هر يک از رکوردهائي که توسط يک SQL query خاص برگردانده شده است ، ايجاد مي گردند . براي هر DataRow ، در ابتدا يک DataGridItem ايجاد مي گردد. در ادامه رويداد ItemCreated مربوط به DataGrid فعال مي گردد . در مرحله بعد ، DataRow به خصلت DataItem مربوط به DataGridItem نسبت داده مي شود .در نهايت رويداد ItemDataBound مربوط به DataGrid فعال مي شود . اين فرآيند براي تمامي DataRows تکرار خواهد شد .
فرآيند فوق در سه کنترل اشاره شده مشابه بوده و تنها تفاوت موجود در اين رابطه ، ايجاد يک DataListItem ، در کنترل DataList و يک RepeaterItem درکنترل Repeater مي باشد ( در مقابل ايجاد يک DataGridItem ، در کنترل DataGrid ) .

کنترل DataGrid :

• کنترل DataGrid به منظور نمايش داده در يک جدول HTML ، طراحي شده است. هر رکورد موجود در DataSource مرتبط با DataGrid به صورت يک سطر در جدول HTML نمايش داده مي شود.
• DataGrid داراي خصلتي با نام AutoGenerateColumns است که مي تواند مقدار True و يا False را داشته باشد . در صورتي که مقدار خصلت فوق True باشد ( گزينه پيش فرض )، هر فيلد موجود در DataSource به عنوان يک ستون در جدول HTML نمايش داده مي شود . در صورتي که خصلت AutoGenerateColumns مقدار False را دارا باشد ، برنامه نويسان مي بايست ستون هاي مورد نظر براي نمايش را مشخص نمايند .
• DataGrid ، هر رکورد موجود در DataSource را به عنوان يک سطر و هر فيلد را به صورت يک ستون در جدول نمايش مي دهد .
• با اين که DataGrid اين امکان را در اختيار پياده کنندگان قرار مي دهد که بتوانند فرمت نمايش يک ستون خاص را با سليقه خود مشخص نمايند ( با استفاده از <asp:TemplateColumn> ) ، ولي کنترل فوق همچنان داراي محدوديت نمايش هر رکورد DataSource در يک سطر جدول HTML است .
• صرفنظر از محدوديت اشاره شده ، کنترل فوق با توجه به ويژگي هاي متعددي که در اختيار طراحان و پياده کنندگان قرار مي دهد ، يکي از رايج ترين کنترل هاي موجود به منظور نمايش داده است . مثلا" با نوشتن کد اندکي امکان مرتب سازي ، Paging و ويرايش داده ها فراهم مي گردد .

کنترل DataList :

• کنترل DataList به منظور نمايش داده هائي که داراي layout سفارشي شده بالائي مي باشند ، توصيه شده است .
• کنترل DataList به صورت پيش فرض داده خود را در يک جدول HTML نمايش مي دهد .
• با استفاده از مقداري که به خصلت RepeateColumns نسبت داده مي شود ، مي توان تعداد رکورد DataSource به منظور نمايش در هر سطر جدول HTML را مشخص نمود ( بر خلاف DataGrid ) . مثلا" کد زير امکان نمايش دو رکورد DataSource را در هر سطر جدول HTML فراهم مي نمايد .

<asp:DataList runat="server" id="SrcoDataList1"
   ...
RepeatColumns="2">
 
  <ItemTemplate>
     <b>عنوان مقاله:</b><br />
      <%# DataBinder.Eval(Container.DataItem, "ArticlesName") %>
       <p>
       <b>شرح</b><br />
       <%# DataBinder.Eval(Container.DataItem, "ArticlesDescription") %>
  </ItemTemplate>

</asp:DataList>

• همانگونه که در کد فوق مشاهده مي گردد ، DataList از تعدادي تمپليت تشکيل مي گردد . تمپليت ها مي توانند شامل ترکيبي از تگ هاي HTML و عبارات نسبت دهي داده باشند ( همانگونه که در ItemTemplate نشان داده شده است ) . عبارات نسبت دهي ، عباراتي هستند که محدوده آنان توسط علامت <% ...#%> مشخص شده و شامل کدهائي مي باشند که همزمان با فراخواني متد DataBind مربوط به DataListIItem ، اجراء خواهند شد . ItemTemplate ، تمپليتي را مشخص مي نمايد که توسط هر يک از رکوردهاي DataSource استفاده خواهد شد . کنترل DataList داراي تمپليت هاي متعددي است :
? AlternatingItemTemplate : در صورتي که مشخص گردد، هر رکورد DataSource از اين تمپليت در مقابل تمپليت ItemTemplate استفاده مي نمايد( يکي در ميان ) .
? EditItemTemplate : تمپيلتي است که از آن در مواردي که يک سطر DataList در "وضعيت ويرايش " است ، استفاده مي گردد .
? HeaderTemplate : تمپليتي است که از آن به منظور نمايش عنوان DataList استفاده مي گردد( درصورتي که خصلت ShowHeader مقدار True را دارا باشد ).
? FooterTemplate : تمپيلتي است که از آن به منظور نمايش footer يک DataList استفاده مي گردد ( درصورتي که خصلت Showfooter مقدار True را دارا باشد ) .
? Separator Template : در صورت تعريف ، پس از نمايش هر يک از آيتم هاي موجود در DataList از آن استفاده مي گردد ( جداکننده هر يک از رکوردها ) .
• DataList قادر به انجام عمليات مرتب سازي ، paging و ويرايش داده ها نيز مي باشد. اين کنترل به منظور انجام عمليات فوق، نيازمتد برنامه نويسي بمراتب بيشتري نسبت به DataGrid است. بنابراين در صورتي که به هر يک از موارد اشاره شده نياز داشته باشيم ، DataGrid گزينه مناسبتري در اين رابطه خواهد بود. در صورت عدم نياز به پتانسيل هاي اشارشده و تمايل به اعمال کنترل بيشتردر رابطه با نحوه نمايش داده ها ( formatting) ، استفاده از کنترل DataList توصيه مي گردد .

کنترل Repeater :

• کنترل Repeater بر خلاف کنترل هاي DataList و DataGrid از کلاس WebControl مشتق نشده است . بنابراين داراي خصلت هائي نظير Font، ForeColor، BackColor و BorderStyle نمي باشد ( معروف به خصلت هاي stylistic ) .
• کنترل Repeater همانند کنترل DataList ، صرفا" از تمپليت ها حمايت نموده و داراي زيرمجموعه اي از تمامي تمپليت هاي قابل استفاده در يک DataList است . از تمپليت هاي زير مي توان به همراه Repeater استفاده نمود :
? AlternatingItemTemplate
? ItemTemplate
? HeaderTemplate
? FooterTemplate
? SeparatorTemplate
• کنترل Repeater حداکثر انعطاف لازم در خصوص توليد HTML را ارائه مي نمايد . در حالي که کنترل DataGrid محتويات DataSource را در قالب يک جدول HTML و DataList در قالب يک جدول HTML و يا تگ هاي SPAN ، ارائه مي نمايند ( متناسب با خصلت RepeateLayout مربوط به کنترل Repeater ) ، کنترل Repeater هيچگونه محتواي HTML را اضافه نمي نمايد، مگر اين که با صراحت آنان را در تمپيلت ها مشخص نمود .
• Repeater يک کنترل مناسب به منظور نمايش داده درون يک ساختار مبتني بر HTML خاص است ( مثلا" يک Unsorted List ) . همانگونه که در کد پائين مشاهده مي گردد ، نمايش داده هاي موجود در يک بانک اطلاعاتي توسط يک Unsorted List با استفاده از يک Repeater بمراتب راحت تر از ساير کنترل هاي داده است : اضافه نمودن تگ <UL> به HeaderTemplate و تگ < UL/> به بخش FooterTemplate و تگ <li> به همراه فيلد DataSource مورد نظري است که قصد نمايش آن را در ItemTemplate داريم .

<asp:Repeater runat="server" id="SrcoRepeater">

  <HeaderTemplate>
     <ul>
   </HeaderTemplate>

  <ItemTemplate>
      <li>
      <Font face="Tahoma">
         <%# DataBinder.Eval(Container.DataItem, "ArticlesName") %>
      </Font>
      </il>
  </ItemTemplate>

  <FooterTemplate>
     </ul>
  </FooterTemplate>

</asp:Repeater>

• در مواردي که قصد نمايش داده را با يک فرمت خاص ( غير از يک جدول HTML ) داشته باشيم، استفاده از کنترل Repeater توصيه مي گردد .
• کنترل Repeater داراي امکانات از قبل تعبيه شده اي به منظور انجام عملياتي نظير مرتب سازي ، ويرايش و يا Paging داده ، نمي باشد . در صورت ضرورت، مي بايست پتانسيل هاي فوق از طريق برنامه نويسي به آن اضافه گردد .

خلاصه

در دو مقاله اي که ارائه گرديد به نقاط مشترک و تفاوت بين سه کنترل داده DataGrid، DataList و Repeater اشاره گرديد . مهمترين نقطه مشترک بين سه کنترل فوق ، نحوه حرکت در بين يک DataSource و ايجاد يک مجموعه از DataWebControlNameItems است . علاوه برموارد فوق ، کنترل هاي فوق از سه رويداد مشابه ItemCreated ItemDataBound, ItemCommand نيز استفاده مي نمايند .
هر يک از کنترل هاي فوق داراي نقاط قوت و محدوديت هاي مختص به خود مي باشند :
• DataGrid يک گزينه بسيار مناسب براي نمايش سريع و ساده داده هاي موجود در يک بانک اطلاعاتي و در يک جدول با فرمت HTML است . کنترل فوق داراي امکانات پيشرفته اي نظير Paging ، مرتب سازي و ويرايش داده ها است .DataGrid داراي محدوديت اندکي در رابطه با فرمت عمومي ارائه داده است .
• DataList داراي آزادي عمل بيشتري است . مثلا" همانگونه که مشاهده گرديد، با استفاده از خصلت RepeateColumns مي توان چندين رکورد DataSource را در يک سطر جدول HTML نمايش داد . کنترل فوق به منظور نمايش محتواي مورد نظر از تمپليت ها استفاده مي نمايد . تمپليت ها داراي پتانسيل بالائي به منظور سفارشي نمودن نحوه ارائه خروجي مي باشند .
• Repeater داراي کارآئي مطلوبي در خصوص نحوه ارائه خروجي است . تگ هاي HTML تفسير شده در کنترل Repeater ماحصل تگ هاي HTML توليد شده در تمپليت هاي مربوط به کنترل مي باشد . بنابراين ما شاهد توليد HTML اضافه اي نخواهيم بود ( اين وضعيت در کنترل هاي DataGrid و DataList وجود دارد ) . کنترل Repeater داراي امکانات از قبل تعبيه شده اي به منظور انجام عملياتي نظير paging ، مرتب سازي و ويرايش داده نمي باشد .
Add Comments
Name:
Email:  
User Comments:
SecurityCode: Captcha ImageChange Image