PDA

View Full Version : آموزش: چهار روش برای نمايش محتوای DataSet در فرمهای وب



baran_mehr
سه شنبه 02 شهریور 1389, 18:01 عصر
در ADO.NET دو روش برای کار با داده ها وجود دارد: DataSet و DataReader. هر کدام از اين دو روش موارد استفاده خود را دارند. اگر هدف نشان دادن سريع داده هاست DataReader مناسب تر از DataSet می باشد ولی اگر قصد انجام عملياتی بر روی داده ها داريد و لازم است داده ها در حافظه مقيم شوند بايد از DataSet استفاده کنيد. در اين مقاله چهار روش برای نمايش محتوای يک DataSet در فرمهای وب بيان می شود.


---------------------------------------------------------
وقتی از DataSet استفاده می کنيد بدليل انبار شدن داده ها در حافظه، استفاده نادرست از آن می تواند سرعت و کارايی برنامه وب شما را کاهش دهد، البته استفاده نادرست از DataSet در برنامه های ويندوز هم تاثير منفی در کارايی برنامه دارد ولی مسلما به اندازه برنامه های وب محسوس نيست و اين بدليل آن است که در برنامه های وب امکان انجام درخواستهای همزمان از يک صفحه وجود دارد.

در اين مقاله چهار روش برای نمايش محتوای يک DataSet در فرمهای وب بيان می شود:

۱- استفاده از کنترل DataGrid
۲- استفاده از کنترل DataList
۳- استفاده از کنترل Repeater
۴- استفاده از يک متغير

هر DataSet می تواند يک يا چندين DataTable را شامل شود. برای وارد کردن داده ها به داخل DataSet نياز به استفاده از يک DataAdapter داريم. انجام مراحل زير برای وارد کردن داده ها در DataSet اساسی هستند:

• ايجاد يک Connection به پايگاه داده:


Dim strConn as string = “initial catalog=Northwind;integrated security=SSPI;persist security info=False;workstation id=DOTNET"
Dim MyConn as New SQLConnection(strConn)

• ايجاد DataSet:



Dim ds as DataSet=New DataSet()

• ايجاد DataAdapter:



Dim MySQL as string = "Select Employees.FirstName, Employees.LastName, Employees.Title from Employees"
Dim da as New SQLDataAdapter(MySQL,MyConn)

• بعد از انجام اين مراحل متد Fill از شئ DataAdapter را فراخوانی می کنيم:



da.Fill(ds,"Employees")

پارامتر اول در اين متد نام DataSet و پارامتر دوم نام DataTable جديدی است که می خواهيم تعريف کنيم.

اکنون DataSet شامل داده هايی می باشد که از DataAdapter به داخل آن انتقال يافته اند. برای نشان دادن داده های داخل DataSet از يکی از روشهای زير استفاده می کنيم:


۱- کنترل DataGrid

با استفاده از کد زير می توان جدول Employees را (که در داخل DataSet قرار دارد) در DataGrid نشان داد:



MyDataGrid.Datasource=ds.Tables("Employees").DefaultView
MyDataGrid.DataBind()

همانطور که مشاهده می کنيد ابتدا با مشخص نمودن خصوصيت Datasource کنترل DataGrid - که جدول Employees واقع در DataSet می باشد - داده ها به داخل DataGrid انتقال می يابند و سپس با فراخوانی متد DataBind داده ها بر روی صفحه نشان داده می شوند.


۲- کنترل DataList

برای مقيد کردن داده ها بر روی کنترلهای DataList و Repeater نيز همانند کنترل DataGrid می توانيد کدهای زير را بکار ببريد:



MyDataList.Datasource=ds.Tables("Employees").DefaultView
MyDataList.DataBind()


۳- کنترل Repeater


MyRepeater.datasource = ds.Tables("Employees").DefaultView
MyRepeater.DataBind()

کنترلهای DataGrid ،DataList و Repeater کنترلهای DataBound نام دارند. کنترلهای DataBound امکان تنظيم منابع داده را به صورت Programmatically فراهم می کنند. اين کنترلها بعد از تنظيم منبع داده ای بر روی آن تکرار شده و بر اساس فرمت تعيين شده برای کنترل، داده ها را نمايش می دهند. فرمت فقط برای يک سطر مشخص می شود و همه سطرها بر اساس آن نشان داده می شوند.

این که کدام کنترل را برای نمايش داده ها انتخاب کنيد به اين بستگی دارد که می خواهيد چه مقدار کنترل بر روی فرمت نمايش داده ها داشته باشيد. کنترل DataGrid آسانترين و ساده ترين راه برای به نمايش درآوردن داده ها در قالب يک جدول است. Visual Studio .NET هم قالب های آماده ای را از طريق گزينه Auto Format برای تغيير ظاهری کنترل DataGrid (و همچنين DataList) در اختيار ما قرار می دهد. DataList کمی پيچيده تر از DataGrid است ولی امکان کنترل زيادی را در رابطه با فرمت بندی از طريق استفاده از الگوها فراهم می کند. کنترل Repeater نسبت به DataList هم پيچيده تر است و می توان کنترل خيلی بيشتری را هنگام استفاده از الگوها بر روی فرمت نمايش داده ها اعمال نمود.

به دليل اين که کنترلهای DataList و Repeater به طور پيش فرض فرمت داخلی ندارند هنگام تعريف بايد آنها را فرمت بندی نماييم (فرمت کنترل DataGrid را هم می توان تغيير داد ولی اگر تغيير ندهيم مشکلی پيش نمی آيد و داده ها نمايش داده می شوند). به عنوان نمونه برای کنترل DataList می توان چنين نوشت:



<asp:DataList id="MyDataList" runat="server" GridLines="None" cellpadding="2" cellspacing="2" Headerstyle-BackColor="#8080C0" Headerstyle-Font-Name="Arial" Headerstyle-Font-Size="8" Font-Name="Arial" Font-Bold="false" Font-Size="8">
<ItemTemplate>
<%# DataBinder.Eval(Container.DataItem, "firstname") %> <%# DataBinder.Eval(Container.DataItem, "lastname") %> - <b><i><%#DataBinder.Eval(Container.DataItem, "Title") %> </i></b>
</ItemTemplate>
</asp:DataList>

DataBinder.Eval متدی است که برای ارزيابی عبارات data-binding در زمان اجرا از آن استفاده می شود. ساختار اصلی اين متد به صورت زير است:



<%# DataBinder.Eval(Container, EvalExpression, FormatExpression) %>

Container عبارتی را بيان می کند که می خواهيم ارزيابی کنيم، برای کنترلهای DataBound هميشه مقدار Container.DataItem را به جای Container قرار می دهيم. EvalExpression نام خصوصيت يا آيتمی است که بايد ارزيابی شود و FormatExpression يک عبارت با فرمت رشته ای است که برای فرمت کردن نتيجه که يک رشته است استفاده می شود.


۴- استفاده از متغير برای نشان دادن محتوای DataSet

برای نشان دادن محتوای DataSet می توان تکنيک استفاده از متغير را بکار برد. برای اين کار ابتدا محتوای DataSet را در يک متغير از نوع String قرار می دهيم. کد لازم برای انجام اين کار به صورت زير است:



Dim sEmps as String
Dim dr As DataRow
For Each dr In ds.Tables("Employees").Rows
sEmps += "<b>" & dr("firstname") & " " & dr("lastname") & " </b> - " & dr("Title") & "<br>"
Next

روشی که در اينجا استفاده شده است پيمايش تمام سطرهای جدول مورد نظر با استفاده از يک حلقه For Each … Next است که همه آنها را در داخل متغير از نوع String قرار می دهد. سپس خصوصيت text يک کنترل literal را برابر اين متغير قرار می دهيم:



litEmps.text=sEmps

برنامه آماده مربوط به مقاله را می توانيد دريافت نماييد.

delasaee
چهارشنبه 03 شهریور 1389, 01:48 صبح
ممنون از آموزش مفیدتون
اگه امکان داشت آموزش عملیات بر روی داده ها(insert,delete,update)به وسیله dataset را هم آموزش بدید
درباره datatable هم اگه وقت کردید بیشتر توضیح بدید که چی هست و چه کار می کنه

baran_mehr
چهارشنبه 03 شهریور 1389, 10:25 صبح
سلام
بله حتما براتون در این باره مثالی هم خواهم گذاشت.
کلاس مجموعه داده (DataSet)

مهمترین شئ Ado.Net یعنی مجموعه داده (DataSet) ، نمایی از کل پایگاه داده است.
DataSet کلکسیونی است از تمام رکوردست ها(که در Ado.Net به آنها جدول داده هم گفته میشه)
اما تنها وظیفه شئ DataSet این نیست ، یک مجموعه داده (DataSet) میتواند شامل هر تعداد جدول ، روال ذخیره شده ، جستجوی Sql و نما باشد.
در حقیقت یک مجموعه داده(DataSet) میتواند نماینده کل پایگاه داده باش.
کلاس DataSet کلکسیونی از کلاسهای جدول داده و روابط داده و زیر کلاسهای آن عبارتند از:
سطر داده (DataRow)
ستون داده (DataColumn)
قید (Constrint)
اطلاعاتی که Ado.Net از طریق شئ مجموعه داده ارائه می کند. میتواند یک پایگاه داده را در هر نقطه دیگر بازسازی کند. شئ DataSet کلکسیونی دارد به نام سطرها(Rows) که مجموعه ایست از چندین شئ سطر داده(DataRow)
به این پست (http://barnamenevis.org/forum/showthread.php?t=241871)هم نگاهی بیندازید

baran_mehr
چهارشنبه 03 شهریور 1389, 10:36 صبح
کلاس جدول داده (DataTable)

شئ جدول داده در Ado.Net نشاندهنده یک جدول منحصر به فرد در حافظه است.
با این شئ میتوان به طور مستقل و یا به عنوان یک شئ از اشیاء سلسله مراتب مجموعه داده (DataSet) کار کرد. این شئ تمام اطلاعات لازم برای بازسازی یک جدول (مانند ستونها ، قیدها ، کلیدها ، سطرها ، و روابط را در خود نگه میدارد)
یه جورایی به طور عامیانش این میشه که dataset مجموعه ای از چندین جدول هست که میتونیم از هر کدوم که خواستیم استفاده کنیم و datatable مشخص کننده یک جدول هست.
من خودم بین Dataset و DataTable همیشه از DataTable استفاده میکنیم.
امیدوار مفید بوده باشه.

baran_mehr
چهارشنبه 03 شهریور 1389, 10:56 صبح
اینم یه نمونه برنامه استفاده از دیتاست برای خوندن اطلاعات