ادامه DataView Class
ابتدا مثل ھميشه يک سری کد عمومی و تکراری:
ConfigurationManager.ConnectionStrings("aaa").ConnectionString (Dim cons As New SqlConnection(css Dim cmd1 As String = "SELECT" * FROM branch Dim cmd2 As String = "SELECT" * FROM account (Dim ad As New SqlDataAdapter(cmd1, cons Dim dss As New DataSet ()cons.Open ("ad.Fill(dss, "branch ad.SelectCommand.CommandText = cmd2 ("ad.Fill(dss, "account
در اين کد ما دو Query را اجرا کرديم و به ترتيب جداول حاصل را در DataSet قرار داديم.حالا که دو جدول داريم رابطه ای را بين ان ھا برقرار می کنيم:
,("Dim rel As New DataRelation("MyRelation ,("dss.Tables("branch").Columns("branch_name ,(("dss.Tables("account").Columns("branch_name
باز ھم ابتدا يک نام, سپس نام ستونی از جدولی که کليد اصلی است و در نھايت نام ستونی از جدولی درگر که کليد خارجی است.البته اين رابطه تکراری است چون پيش تر ھم ان را ديده بوديد.حالا اين رابطه را به
(“Dim dv As New DataView(dss.Tables(“branch
قبل از ادامه ی کار می خواھيم ببينيم معنی این عبارت در طراحی وب سایت چيست:
Max که تابع جمعی است و مقدار بيشينه ی يک ستون را بين سطر ھای مختلف بدست می آورد.مقدار ورودی آن ھم نام آن ستون است.ولی ما به جای نام آن ستون , از عبارت (Child(MyRelation استفاده کرديم.اين به اين معنی است که تابع max بايد روی جدول حاصل از رابطه ی MyRelation اعمال شود و عبارت
account_number به اين معنی است که Max از ستون account_number محاسبه شود.پس فھميديم که نامی که برای رابطه در نظر می گرفتيم کجا به درد می خورد.پس تابع child ھم کارش بدست اوردن جدول حاصل از رابطه ای است که نام آن را به عنوان ارگومان ورودی در يافت می کند.پس کاربرد نام رابطه به نوعی دردستورات Sql است چون در اينجا ما میخواھيم آن را در متد RowFilter به کار ببريم که در اصل ھمان عبارت جلوی WHERE است.
(("Dim dv As New DataView(dss.Tables("branch "dv.RowFilter = "MAX(child(MyRelation).account_number) > 7
در اينجا ابتدا متغيری از نوع DataView تعريف کرديم و به صفت RowFilter ان عبارت زير را نسبت داديم :
MAX(child(MyRelation).account_number) > 7
که آن سطر ھايی را از جدول حاصل رابطه جدا می کند که شماره حسابشان از عدد 7 بزرگتر است.برای نمايش ھم کافيست GridView استفاده کنيد:
GridView1.DataSource = dv
()GridView1.DataBind
دقت کنيد که در اينجا ما به دليل استفاده از DataView و خاصيت RowFilter آن و با استفاده از توابع جمعی توانستيم حاصل را در GridView قرار دھيم درحاليکه نتيجه ی يک رابطه ی معمولی را نمی توان به صورت عادی در GridView نمايش داد مگر اينکه از خلاقيت برنامه نويسی خود استفاده کنيد و راه خاصی بينديشيد.شما ھمانطور که می توانستيد به جداول DataSet سطر اضافه کنيد و سپس آن را Update کنيد می توانيد به ان ستون نيز اضافه کنيد.فايده ی اين کار در اين است که می توانید به ان ستون نيز اضافه کنيد.فايده ی اين کار در اين است که میتوانيد مقادير اين ستون جديد را به گونه ای بر اساس مقادير ستون ھا ی قبلی آن محاسبه کنيد و نمايش دھيد.مثلا يک جدول داريد که در ھر سطر از آن مقدار گردش مالی ھر فرد به ترتيب ماه به ماه ذکرشده باشد.شما می توانيد با تابع جمعی AVG و به کاربردن ان در خصوصيت RowFilter از شی DataRow ميانگين گردش مالی ھر فرد را محاسبه کرده و سپس مقادير حاصل را در يک ستون جداگانه و متناظر با آن بدست آوريد.اين کار ھا بدون نياز به اتصال مجدد به پايگاه داده انجام می شود و خوبيش اين است که کاملا به روز می باشد و در ھر جای صفحه می توانيدآن ھا را محاسبه کنيد.در مثال زير ما جدول Branch را در نظر گرفتيم و می خواھيم که ميانگين موجودی تمام شعبه ھا را به عنوان ستونی جداگانه نمايش دھيم.حالت اوليه ی اين جدول به صورت زير است:
از صفحه سئو و بهینه سازی در اصفهان دیدن کنید

می بينيد که يک ستون به ستون ھای آن اضافه شده.البته اين مثال بسيار ساده خواھد بود.و به درد مقايسه می خورد.مثلا پس از محاسبه ی ميانگين موجودی ھا می توان شعبه ھايی را که داراييشان از ميانگين کمتر است را بازيابی و طی عملياتی اصلاح کرد.که در اينجا ٢ شعبه ی اول اين مشکل را دارند:
البته Query ھای پيچيده ی Sql ھست که اين مقادير را يک جا محاسبه کنند و به خروجی ببرند مثلا در اينجا اگر بخواھيد يک راست با Sql آن ھا را بدست آوريد به صورت زير می شود:
with avg_assets(value) as (select avg(branch_assets) from branch) select branch_name,branch_assets from branch, avg_assets where branch.branch_assets < avg_assets.value
With در Sql يک متغير است که می توان مقداری را به آن نسبت داد که در اينجا ميانگين دارايی ھمه ی شعبه ھا است.سپس با ضرب کارتزين اين مقدار در Branch جلوی عبارت From در حقيقت انگار ستون مورد نظر را به آن اضافه کرديم و از اين جدول حاصل آنھايی را که داراييشان از ميانگين کمتر است را بدست اوريم.
به دليل واضح شدن مثال ابتدا خود مثال و خروجی ھا را گفتيم حالا به سراغ کد میرويم.برای اضافه کردن يک ستون از شی DataColumn استفاده می کنيم که از خانواده DataTable و DataRow است .اين شی ٣ آرگومان می گيرد. ١-نام ستون ٢- نوع داده ای مقادير ستون ٣-مقادير ستون که می تواند يک Sql Query باشد که از نوع String است و در حقيقت به شما اجازه ی محاسبه ی مقداری را از ستون ھای پيشين میدھد دکه ما ميانگين ستون Branch_assetsرا در آن قرار داديم و نامش را Avg_assets و نوع داده ای آن را عددی قرار داديم
(dss.Tables("branch").Columns.Add(dc حالا برای نمايش به صورت زير عمل کنيد: ("GridView1.DataSource = dss.Tables("branch ()GridView1.DataBind
حالا برای نمايش به صورت زير عمل کنيد:
("GridView1.DataSource = dss.Tables("branch ()GridView1.DataBind
برای بدست آوردن نام و موجودی شعبه ھايی که از ميانگين کمتر ھستند نيز از يک شی DataView استفاده می کنيم و مقدار RowFilter آن را نام ستون جديد است.باز ھم دقت کنيد اين نام ستون جديد است.باز ھم دقت کنيد اين نام در Query ھای به درد می خورد.در حالت کلی نام متغير برای Add کردن و نام رشته ای برای استفاده در QuerySql است:
(("Dim dv As New DataView(dss.Tables("branch "dv.RowFilter = "branch_assets < Avg_assets GridView2.DataSource = dv GridView2.DataBind()
می بينيد که چقدر استفاده از اشيا DataView-DataSet-DataRow و… در محيط Connection بسته به کار ما می آيد و می تواند کارايی سايت ما را بالا ببرد. به بحث XML نيز بيان خواھيم کرد. طراحی وب سایت الو وب
.
دیدگاهتان را بنویسید