<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>مدونة النبهاني &#187; dataset</title>
	<atom:link href="http://alnabhani.wordpress.com/tag/dataset/feed/" rel="self" type="application/rss+xml" />
	<link>http://alnabhani.wordpress.com</link>
	<description>أحدث مواضيعي البرمجية والتقنية</description>
	<lastBuildDate>Sat, 28 Nov 2009 17:05:07 +0000</lastBuildDate>
	<generator>http://wordpress.com/</generator>
	<language>ar</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<cloud domain='alnabhani.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://www.gravatar.com/blavatar/91abf77f7c013d66c6f253d8802f990d?s=96&#038;d=http://s.wordpress.com/i/buttonw-com.png</url>
		<title>مدونة النبهاني &#187; dataset</title>
		<link>http://alnabhani.wordpress.com</link>
	</image>
			<item>
		<title>Master Details &#8211; الجزء الثاني : استخدام Dataset</title>
		<link>http://alnabhani.wordpress.com/2009/07/31/master-details-%d8%a7%d9%84%d8%ac%d8%b2%d8%a1-%d8%a7%d9%84%d8%ab%d8%a7%d9%86%d9%8a-%d8%a7%d8%b3%d8%aa%d8%ae%d8%af%d8%a7%d9%85-dataset/</link>
		<comments>http://alnabhani.wordpress.com/2009/07/31/master-details-%d8%a7%d9%84%d8%ac%d8%b2%d8%a1-%d8%a7%d9%84%d8%ab%d8%a7%d9%86%d9%8a-%d8%a7%d8%b3%d8%aa%d8%ae%d8%af%d8%a7%d9%85-dataset/#comments</comments>
		<pubDate>Fri, 31 Jul 2009 11:35:00 +0000</pubDate>
		<dc:creator>alnabhani</dc:creator>
				<category><![CDATA[برمجة قواعد البيانات ADO.NET]]></category>
		<category><![CDATA[ado.net]]></category>
		<category><![CDATA[dataset]]></category>
		<category><![CDATA[master details]]></category>

		<guid isPermaLink="false">http://alnabhani.wordpress.com/2009/07/31/master-details-%d8%a7%d9%84%d8%ac%d8%b2%d8%a1-%d8%a7%d9%84%d8%ab%d8%a7%d9%86%d9%8a-%d8%a7%d8%b3%d8%aa%d8%ae%d8%af%d8%a7%d9%85-dataset/</guid>
		<description><![CDATA[1- استخدام الـ Dataset :
سافترض بانك تعرف كيفية اضافة مصادر البيانات فلن اضع صورا هنا ، سنقوم اولا باضافة مصدر البيانات من خلال القائمة Data &#124; Add New Data Source ومن هناك نحدد قاعدة البيانات Northwind ونختار الجدولين Customers و Orders فقط ثم ننهي المعالج .
عمل الـ Full Details Form :
نتوجه بعدها إلى النافذة Form1 [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=alnabhani.wordpress.com&blog=454111&post=138&subd=alnabhani&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><h1>1- استخدام الـ Dataset :</h1>
<p>سافترض بانك تعرف كيفية اضافة مصادر البيانات فلن اضع صورا هنا ، سنقوم اولا باضافة مصدر البيانات من خلال القائمة Data | Add New Data Source ومن هناك نحدد قاعدة البيانات Northwind ونختار الجدولين Customers و Orders فقط ثم ننهي المعالج .</p>
<h5>عمل الـ Full Details Form :</h5>
<p>نتوجه بعدها إلى النافذة Form1 لنقوم بالعمل عليها ، وارجو منكم التركيز جيدا هنا .</p>
<p>1- توجه إلى القائمة Data | Show Data Sources او اضغط على shift+alt+d ستظهر لك النافذة بالشكل التالي :</p>
<p>&#160;</p>
<p><img src="http://www.vb4arab.com/vb/uploaded/486/01249038154.png" /> </p>
<p>لاحظ من هناك وجود الجدولين Customers و Orders ، ينبثق من كل منهما الحقول التابعة لهما والميزة هنا هو امكانيه اختيار الاداة التي يتم عرض بيانات الحقل بها ، حتى الجدول نفسه يمكن تحديد ما اذا كنت تود عرضه بطريقة الجدول Grid او التفاصيل details .</p>
<p>من اهم الامور هنا هو وجود الجداول المتربطة بشكل متداخل ، فلاحظ من الصورة السابقة وجود الجدول Orders مرتين ، الاولى بشكل تابع للجدول Customers والثانية بشكل مستقل عنه ، تبعية الجدول Orders للجدول Customers من خلال العلاقة التي بينهما ( One-to-Many ) يعني امكانيه عرض السجلات التابعة لكل سجل بشكل سهل جدا . هذا ما سنشاهده بعد قليل فلا تخف.</p>
<p>قم بالضغط على الجدول Customers وستنبثق لك قائمة صغيرة لتحدد طريقة العرض اختر منها details كما بالشكل التالي :</p>
<p>&#160;</p>
<p>&#160;<img src="http://www.vb4arab.com/vb/uploaded/486/01249039340.png" /> </p>
<p>الآن الخطوة الاكثر اثارة واهمية ، وهي سحب الجدول Custometrs إلى النافذة form1 وتركه هناك ، سيقوم Visual Studio بتوليد كل الادوات والاكواد المطلوبة لعرض البيانات وربطها والتنقل بينها &#8230; الخ كما بالصورة التالية :</p>
<p><img src="http://www.vb4arab.com/vb/uploaded/486/01249039561.png" /> </p>
<p>لو قمت بتشغيل التطبيق الآن ، ستلاحظ ظهور البيانات بشكل جميل ومرتب مع امكانية التنقل بين السجلات بسهولة ، فضلا عن امكانيه الاضافة والحذف والحفظ ايضا .</p>
<p>لم ينته عملنا بعد ، فنحن نريد اضافة الجدول Orders التابع للجدول Customers ، وارجو ان لا تخلط هنا مع الجدول Orders المستقل لأنه لن يفيدنا ، لذلك قم بسحل الجدول Orders الفرعي إلى النافذة ايضا وشاهد النتيجة :</p>
<p><img src="http://www.vb4arab.com/vb/uploaded/486/01249039636.png" width="492" height="480" /> </p>
<p>لو قمت الان بتجربة البرنامج ، ستجده يعمل بالشكل المطلوب تماما ، فبمجرد عرض سجل من الجدول customers في الاعلى ، يتم عرض السجلات المرتبطة به من الجدول Orders مباشرة في الاداة DataGrid في الاسفل مباشرة .</p>
<p>اذا كنت تستخدم الاصدار 2008 فقد اتممت كل الامور الضرورية المطلوبة ، اما في الاصدار 2005 و .net framework 2.0 فأنت بحاجه إلى اضافة بعض السطور في كود الحفظ من الـ BindingNavigator فهنا يتم تحديث كل جدول على حده للأسف ، لذلك ستجد كودا مثل :</p>
<table border="1" cellspacing="0" cellpadding="2" width="500">
<tbody>
<tr>
<td dir="ltr" valign="top" width="500">
<div class="code"><font color="#0000ff">Me</font><font color="#000000">.Validate()</font><font color="#808080">             <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; </font><font color="#0000ff">Me</font><font color="#000000">.CustomersBindingSource.EndEdit()</font><font color="#808080">             <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; </font><font color="#0000ff">Me</font><font color="#000000">.CustomersTableAdapter.Update(CustomerOrdersDataset.Customers)</font> </div>
</td>
</tr>
</tbody>
</table>
<p>وهذا يعني تحديث بيانات الجدول Customers فقط دون الجدول Orders المرتبط به ، لذلك اضف بعض السطور ليصبح الكود النهائي بالصورة التالية :</p>
<table border="1" cellspacing="0" cellpadding="2" width="500">
<tbody>
<tr>
<td dir="ltr" valign="top" width="500">
<div class="code"><font color="#0000ff">Me</font><font color="#000000">.Validate()</font><font color="#808080">             <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; </font><font color="#0000ff">Me</font><font color="#000000">.CustomersBindingSource.EndEdit()</font><font color="#808080">             <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; </font><font color="#0000ff">Me</font><font color="#000000">.CustomersTableAdapter.Update(CustomerOrdersDataset.Customers)</font><font color="#808080">             <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; </font><font color="#0000ff">Me</font><font color="#000000">.OrdersBindingSource.EndEdit()</font><font color="#808080">             <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; </font><font color="#0000ff">Me</font><font color="#000000">.OrdersTableAdapter.Update(CustomerOrdersDataset.Orders)</font> </div>
</td>
</tr>
</tbody>
</table>
</p>
<p>بينما في الاصدارات الاحدث من اطار العمل وكذلك فيجوال ستوديو ، يتم توليد الفئة TableAdapterManager يقوم بإدارة كل الكائنات من النوع tableAdapter والعمل عليها دفعة واحدة ! فكود الحفظ سيكون مولدا تلقائيا بالشكل التالي :</p>
<table border="1" cellspacing="0" cellpadding="2" width="500">
<tbody>
<tr>
<td dir="ltr" valign="top" width="500">
<div class="code"><font color="#0000ff">Private</font><font color="#808080">&#160;</font><font color="#0000ff">Sub</font><font color="#808080">&#160;</font><font color="#000000">CustomersBindingNavigatorSaveItem_Click(</font><font color="#0000ff">ByVal</font><font color="#808080">&#160;</font><font color="#000000">sender</font><font color="#808080">&#160;</font><font color="#0000ff">As</font><font color="#808080">&#160;</font><font color="#000000">System.</font><font color="#0000ff">Object</font><font color="#000000">,</font><font color="#808080">&#160;</font><font color="#0000ff">ByVal</font><font color="#808080">&#160;</font><font color="#000000">e</font><font color="#808080">&#160;</font><font color="#0000ff">As</font><font color="#808080">&#160;</font><font color="#000000">System.</font><font color="#2b91af">EventArgs</font><font color="#000000">)</font><font color="#808080">&#160;</font><font color="#0000ff">Handles</font><font color="#808080"> _</font></div>
<div class="code"><font color="#000000">CustomersBindingNavigatorSaveItem.Click</font><font color="#808080">             <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; </font><font color="#0000ff">Me</font><font color="#000000">.Validate()</font><font color="#808080">             <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; </font><font color="#0000ff">Me</font><font color="#000000">.CustomersBindingSource.EndEdit()</font><font color="#808080">             </p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160; </font><font color="#0000ff">Me</font><font color="#000000">.TableAdapterManager.UpdateAll(</font><font color="#0000ff">Me</font><font color="#000000">.CustomerOrdersDataset)</font><font color="#808080">             </p>
<p>&#160;&#160;&#160; </font><font color="#0000ff">End</font><font color="#808080">&#160;</font><font color="#0000ff">Sub</font> </div>
</td>
</tr>
</tbody>
</table>
<p>حركة اخيرة احبها في هذا النوع من النوافذ وهو استخدام عجلة الفأرة MouseWheel للانتقال بين السجلات حيث نضيف الكود التالي في حدث الـ MouseWheel التابع للنافذة Form مباشرة :</p>
<p>&#160;</p>
<table border="1" cellspacing="0" cellpadding="2" width="500">
<tbody>
<tr>
<td dir="ltr" valign="top" width="500">
<div class="code"><font color="#0000ff">Private</font><font color="#808080">&#160;</font><font color="#0000ff">Sub</font><font color="#808080">&#160;</font><font color="#000000">Form1_MouseWheel(</font><font color="#0000ff">ByVal</font><font color="#808080">&#160;</font><font color="#000000">sender</font><font color="#808080">&#160;</font><font color="#0000ff">As</font><font color="#808080">&#160;</font><font color="#0000ff">Object</font><font color="#000000">,</font><font color="#808080">&#160;</font><font color="#0000ff">ByVal</font><font color="#808080">&#160;</font><font color="#000000">e</font><font color="#808080">&#160;</font><font color="#0000ff">As</font><font color="#808080">&#160;</font><font color="#000000">System.Windows.Forms.MouseEventArgs)</font><font color="#808080">&#160;&#160; </font><font color="#0000ff">Handles </font><font color="#0000ff">Me</font><font color="#000000">.MouseWheel</font><font color="#808080">             <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; </font><font color="#0000ff">If</font><font color="#808080">&#160;</font><font color="#000000">e.Delta</font><font color="#808080">&#160;</font><font color="#000000">&gt;</font><font color="#808080">&#160;</font><font color="#800000">0</font><font color="#808080">&#160;</font><font color="#0000ff">Then</font><font color="#808080">             <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; </font><font color="#0000ff">Me</font><font color="#000000">.CustomersBindingSource.MovePrevious()</font><font color="#808080">             <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; </font><font color="#0000ff">ElseIf</font><font color="#808080">&#160;</font><font color="#000000">e.Delta</font><font color="#808080">&#160;</font><font color="#000000">&lt;</font><font color="#808080">&#160;</font><font color="#800000">0</font><font color="#808080">&#160;</font><font color="#0000ff">Then</font><font color="#808080">             <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; </font><font color="#0000ff">Me</font><font color="#000000">.CustomersBindingSource.MoveNext()</font><font color="#808080">             <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; </font><font color="#0000ff">End</font><font color="#808080">&#160;</font><font color="#0000ff">If</font><font color="#808080">             <br />&#160;&#160;&#160; </font><font color="#0000ff">End</font><font color="#808080">&#160;</font><font color="#0000ff">Sub</font> </div>
</td>
</tr>
</tbody>
</table>
<p>بهذا نكون قد انهينا نافذة من النوع Detail view .</p>
<h2>بناء نافذة من النوع Lookup :</h2>
<p>هنا قم بإضافة نافذة جديدة فارغة إلى مشروعك ، وتوجه إلى نافذة الـ Datasources وحدد الجدول Customers وقم بتحديد النوع None لكل الحقول ، فلا نريد عرض سوى حقل واحد وهو ContactTitle حيث نريد عرض اسم الـ contact فقط ، وبالنسبة لهذا الحقل ، اختر الاداة ListBox :</p>
<p>&#160;</p>
<p><img src="http://www.vb4arab.com/vb/uploaded/486/01249039679.png" /> </p>
<p>الآن قم بسحب الجدول customers عن بكرة أبيه إلى النافذة Form ، ستلاحظ توليد الـ BindingNavigator وكل المكونات الاخرى ، وتوليد اداة ListBox فارغة ، قم بالنقر في الزر العلوي منها كما بالشكل التالي :</p>
<p><img src="http://www.vb4arab.com/vb/uploaded/486/01249039794.png" /> </p>
<p>&#160;</p>
<p>قم بتفعيل الخيار Use data bound items ، وستتغير تلك النافذة الصغيرة لتظهر عدة خيارات اضافية بها ، يهمنا منها الخاصية Datasource ، اختر منها CustomerBindingSource كما بالشكل التالي :</p>
<p><img src="http://www.vb4arab.com/vb/uploaded/486/01249039856.png" /> </p>
<p>&#160;</p>
<p>وبالنسبة للخاصية DisplayMember اختر الحقل ContactName التابع للـ customerBindingSource دون غيره :</p>
<p><img src="http://www.vb4arab.com/vb/uploaded/486/01249039906.png" /> </p>
<p>&#160;</p>
<p>الآن قم بتعيين قيمة الخاصية dock التابعة للاداة Listbox لتكون Left حيث اننا نود عرضها بالجانب الايسر في هذه الحالة – وفي حالة كون التطبيق باللغة العربية اجعله Right لاتنسى رجاءا ! – بعدها توجه مرة اخرى إلى النافذة DataSources وقم بسحب الجدول Orders الفرعي – التابع لـ Customers – إلى النافذة مباشرة وقم بضبط الخاصية Dock لها لتكون fill ، شغل بعدها البرنامج مباشرة وشاهد النتيجة بنفسك :</p>
<p><a href="http://www.vb4arab.com/vb/uploaded/486/01249040024.png" target="_blank"><img src="http://www.vb4arab.com/vb/uploaded/486/01249040024.png" width="496" height="335" /></a> </p>
<p>&#160;</p>
<p>حيث يظهر لك في الاداة ListBox الحقل ContactName وبمجرد اختيار احد القيم من هناك يتم عرض البيانات الفرعية التابعة له من الجهة اليمنى في الاداة DataGridView .</p>
<p>تبقى فكرة الحفظ نفسها التي طبقناها في المرة السابقة مع النوع الاخر من النوافذ وذلك في حالة كونك تستخدم VS2005,.net 2.0 .</p>
<p>بهذا نكون انتهينا من عرض طريقة استخدام الـ Dataset في انشاء نوافذ تعرض البيانات بطريقة Master Details .</p>
Posted in برمجة قواعد البيانات ADO.NET Tagged: ado.net, dataset, master details <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/alnabhani.wordpress.com/138/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/alnabhani.wordpress.com/138/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/alnabhani.wordpress.com/138/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/alnabhani.wordpress.com/138/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/alnabhani.wordpress.com/138/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/alnabhani.wordpress.com/138/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/alnabhani.wordpress.com/138/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/alnabhani.wordpress.com/138/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/alnabhani.wordpress.com/138/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/alnabhani.wordpress.com/138/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=alnabhani.wordpress.com&blog=454111&post=138&subd=alnabhani&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://alnabhani.wordpress.com/2009/07/31/master-details-%d8%a7%d9%84%d8%ac%d8%b2%d8%a1-%d8%a7%d9%84%d8%ab%d8%a7%d9%86%d9%8a-%d8%a7%d8%b3%d8%aa%d8%ae%d8%af%d8%a7%d9%85-dataset/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">alnabhani</media:title>
		</media:content>

		<media:content url="http://www.vb4arab.com/vb/uploaded/486/01249038154.png" medium="image" />

		<media:content url="http://www.vb4arab.com/vb/uploaded/486/01249039340.png" medium="image" />

		<media:content url="http://www.vb4arab.com/vb/uploaded/486/01249039561.png" medium="image" />

		<media:content url="http://www.vb4arab.com/vb/uploaded/486/01249039636.png" medium="image" />

		<media:content url="http://www.vb4arab.com/vb/uploaded/486/01249039679.png" medium="image" />

		<media:content url="http://www.vb4arab.com/vb/uploaded/486/01249039794.png" medium="image" />

		<media:content url="http://www.vb4arab.com/vb/uploaded/486/01249039856.png" medium="image" />

		<media:content url="http://www.vb4arab.com/vb/uploaded/486/01249039906.png" medium="image" />

		<media:content url="http://www.vb4arab.com/vb/uploaded/486/01249040024.png" medium="image" />
	</item>
		<item>
		<title>هل استخدم Dataset ام LINQtoSQL ؟</title>
		<link>http://alnabhani.wordpress.com/2009/06/27/%d9%87%d9%84-%d8%a7%d8%b3%d8%aa%d8%ae%d8%af%d9%85-dataset-%d8%a7%d9%85-linqtosql-%d8%9f/</link>
		<comments>http://alnabhani.wordpress.com/2009/06/27/%d9%87%d9%84-%d8%a7%d8%b3%d8%aa%d8%ae%d8%af%d9%85-dataset-%d8%a7%d9%85-linqtosql-%d8%9f/#comments</comments>
		<pubDate>Sat, 27 Jun 2009 06:07:33 +0000</pubDate>
		<dc:creator>alnabhani</dc:creator>
				<category><![CDATA[برمجة قواعد البيانات ADO.NET]]></category>
		<category><![CDATA[تقنية net.]]></category>
		<category><![CDATA[dataset]]></category>
		<category><![CDATA[linqtosql]]></category>
		<category><![CDATA[ntier]]></category>

		<guid isPermaLink="false">http://alnabhani.wordpress.com/2009/06/27/%d9%87%d9%84-%d8%a7%d8%b3%d8%aa%d8%ae%d8%af%d9%85-dataset-%d8%a7%d9%85-linqtosql-%d8%9f/</guid>
		<description><![CDATA[مع كثر هذه التقنيات ، يقل العبئ البرمجي والذهني على البرمج ، لكن الضريبة هي تعلم تقنية جديدة كل يوم ومعرفة اي تقنية يجب ان يستخدم في الحالة التي يواجهها ، خصوصا ان هناك تقنيات كثيرة تصب في نفس الجانب ولكن مع اختلاف الوظيفة والاداء والغرض الاساسي لها . 
من هذه الامور هو استخدام Dataset [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=alnabhani.wordpress.com&blog=454111&post=127&subd=alnabhani&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>مع كثر هذه التقنيات ، يقل العبئ البرمجي والذهني على البرمج ، لكن الضريبة هي تعلم تقنية جديدة كل يوم ومعرفة اي تقنية يجب ان يستخدم في الحالة التي يواجهها ، خصوصا ان هناك تقنيات كثيرة تصب في نفس الجانب ولكن مع اختلاف الوظيفة والاداء والغرض الاساسي لها . </p>
<p>من هذه الامور هو استخدام Dataset او LINQtoSQL ، فبعد ظهور LINQtoSQL صار علينا التفريق في استخدامهما ومعرفة الحالات التي تقتضي افضلية ايهما ! </p>
<p>في الحقيقة هذا يعتمد على السيناريوهات التي تود تحقيقها ، وانت حر بطبيعة الحال في السيناريو الذي تريد . </p>
<p>بالنسبة للـ Dataset :   <br />- الـ Dataset سهل التعريف ، والتسلسل Serialize ، ويسهل فصل الكود فيها عن تصميمه في المشاريع المتعددة الطبقات خصوصا بما يتعلق بالـ TableAdapter المضمنه فيه .    <br />- الـ Dataset يحتوي على متتبع للتغيرات التي تطرأ على البيانات المضمنه فيه، ويدعم التغيير دفعه واحده Batch Editing وكذا بالنسبة للتصفيه والعرض ، كما انه يتعامل بشكل تلقائي مع العلاقات المركبة Complex Relationships .    <br />- يسهل استخدام Dataset عندما نرغب في عمل ربط بيانات DataBinding بشكل متقدم ومعقد .    <br />- يصعب استخدام Dataset عندما نرغب بعمل بعمل عمليات تحقق متقدمة على البيانات .    <br />- يجب تجنب استخدام Dataset عندما تقوم ببناء تطبيق موزع ليس كل العملاء Clients فيه مبنية على net. </p>
<p>بالنسبة لـ LINQtoSQL : </p>
<p>-&#160; يقدم لك LINQtoSQL دعم تحكم كامل بالتحقق Validation, السلوك Behavior ، منطق الأعمال BusinessLogic ، كما انها سهله التوريث للفئات الاخرى ، هذا يعني امكانيه عمل طبقات ام وطبقات مشتقة للاعمال بكل سهولة .   <br />- يمكن عمل تسلسل Serialization لفئات LINQtoSQL على شكل مصفوفات Arrays لغير عملاء net.     <br />- بمجرد ايقاف الاتصال بين LINQtoSQL والـ DataContext ، تكون عملية ال Databinding وتعقب التغييرات على البيانات عملية صعبة ويجب عليك القيام بكل ذلك بنفسك !</p>
Posted in برمجة قواعد البيانات ADO.NET, تقنية net. Tagged: dataset, linqtosql, ntier <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/alnabhani.wordpress.com/127/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/alnabhani.wordpress.com/127/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/alnabhani.wordpress.com/127/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/alnabhani.wordpress.com/127/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/alnabhani.wordpress.com/127/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/alnabhani.wordpress.com/127/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/alnabhani.wordpress.com/127/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/alnabhani.wordpress.com/127/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/alnabhani.wordpress.com/127/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/alnabhani.wordpress.com/127/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=alnabhani.wordpress.com&blog=454111&post=127&subd=alnabhani&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://alnabhani.wordpress.com/2009/06/27/%d9%87%d9%84-%d8%a7%d8%b3%d8%aa%d8%ae%d8%af%d9%85-dataset-%d8%a7%d9%85-linqtosql-%d8%9f/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">alnabhani</media:title>
		</media:content>
	</item>
		<item>
		<title>عمل تقرير لعرض سجل معين &#8211; 2</title>
		<link>http://alnabhani.wordpress.com/2008/08/18/one-row-report-2/</link>
		<comments>http://alnabhani.wordpress.com/2008/08/18/one-row-report-2/#comments</comments>
		<pubDate>Mon, 18 Aug 2008 16:51:09 +0000</pubDate>
		<dc:creator>alnabhani</dc:creator>
				<category><![CDATA[برمجة التقارير]]></category>
		<category><![CDATA[dataset]]></category>
		<category><![CDATA[filter]]></category>
		<category><![CDATA[microsoft reporting tool]]></category>
		<category><![CDATA[microsoft reports]]></category>
		<category><![CDATA[report]]></category>
		<category><![CDATA[report data source]]></category>
		<category><![CDATA[فلترة]]></category>
		<category><![CDATA[تقارير فيجوال ستوديو]]></category>
		<category><![CDATA[طباعة سجل واحد]]></category>

		<guid isPermaLink="false">http://alnabhani.wordpress.com/?p=57</guid>
		<description><![CDATA[في المرة الماضية عندما طرحت التدوينة : عمل تقرير لعرض سجل معين ذكرت طريقة حل تلك المشكلة باستخدام الباراميترات ، البعض قد يستصعبها ، والبعض قد يسأل من منظور تحسين الكفاءة : لماذا نقوم بتحميل البيانات في الذاكرة ( قد تكون بالآلاف ) طول وقت عرض التقرير  بينما نحن نحتاج الى سجل واحد فقط ؟ سؤال جميل [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=alnabhani.wordpress.com&blog=454111&post=57&subd=alnabhani&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>في المرة الماضية عندما طرحت التدوينة : <a rel="bookmark" href="http://alnabhani.wordpress.com/2008/08/15/print_one_row_report/">عمل تقرير لعرض سجل معين</a> ذكرت طريقة حل تلك المشكلة باستخدام الباراميترات ، البعض قد يستصعبها ، والبعض قد يسأل من منظور تحسين الكفاءة : لماذا نقوم بتحميل البيانات في الذاكرة ( قد تكون بالآلاف ) طول وقت عرض التقرير  بينما نحن نحتاج الى سجل واحد فقط ؟ سؤال جميل جدا بل مهم واعتقد ان من يسال سؤال كهذا هو من المبرمجين الذين يهمهم ان يعمل برنامجهم بأقل ثقل على الذاكرة .</p>
<p><span id="more-57"></span><br />
الطريقة الأخرى اسهل اذا اردنا مجرد عرض سجل واحد فقط ، وهي عمل Filter للبيانات في مصدر التقرير قبل ان تصل التقرير، طبعا بمجرد قيامك بإضافة اداة ReportViewer وتحديد تقرير معين موجود في المشروع سيتم اضافة عدة ادوات تلقائيا الى النافذة منها Dataset,TableAdapter,bindingSource ، فعملية الوصول الى مصدر البيانات من خلال الكود سهله جدا .</p>
<p>الفكرة هنا اننا سنقوم بعمل كائن DataView نستخدمه في فلترة البيانات حسب الحقل المميز للمصدر والذي يكون في العادة ID ، بعد ذلك نقوم بحذف كائن الـ ReportDataSource الخاص بالكائن ReportViewer.LocalReport ، ونضيف كائن جديد نعمله بانفسنا .</p>
<p>في حالتي استخدم الجدول Employees من قاعدة البيانات Northwind ولدي Dataset بالإسم EmployeesDataset وفي التقرير مصدر البيانات DataSource اسمه EmployeesDataset_Employees ،وقد اضفت الى النافذة المطلوبة شريط ادوات ToolStrip به أداة Label,TextBox,Button ليقوم المستخدم بإدخال الـ ID ،</p>
<p>بالنسبه للكود ، فقد قمت بحذف السطر التالي من الحدث Load للنافذة :</p>
<div style="margin:5px 20px 20px;">
<div class="smallfont" style="margin-bottom:2px;">رمز:</div>
<p class="alt2" dir="ltr"><span style="font-size:x-small;"><span style="color:#0000ff;"><span style="font-size:x-small;"><span style="color:#0000ff;">Me</span></span></span></span><span style="font-size:x-small;">.ReportViewer1.RefreshReport() </span></p>
</div>
<p>ثم قمت بإستيراد فضاء الأسماء :</p>
<div style="margin:5px 20px 20px;">
<div class="smallfont" style="margin-bottom:2px;">رمز:</div>
<p class="alt2" dir="ltr"><span style="font-size:x-small;"><span style="color:#0000ff;"><span style="font-size:x-small;"><span style="color:#0000ff;">Imports</span></span></span></span><span style="font-size:x-small;"> Microsoft.Reporting.WinForms </span></p>
</div>
<p>وفي حدث النقر Click للزر المدعو tsbtnshowReport :</p>
<div style="margin:5px 20px 20px;">
<div class="smallfont" style="margin-bottom:2px;"><span style="font-size:x-small;"><span style="color:#008000;"></p>
<div style="margin:5px 20px 20px;"><span style="font-size:x-small;"></p>
<table border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td dir="ltr" width="568" valign="top"><strong>&#8216;adding new ReportDataSource object</strong><span style="color:#0000ff;"><strong>Dim</strong><strong> DS </strong><strong>AsNew</strong><strong> ReportDataSource</strong></span></p>
<p><strong>&#8216;making new DataViewObject to get the data and filter it</strong></p>
<p><span style="color:#0000ff;"><strong>Dim</strong><strong> FilteredData </strong><strong>AsNew</strong><strong> DataView(</strong><strong>Me</strong><strong>.EmployeesDataSet.Employees)</strong></span></p>
<p><strong>&#8216;filtering the data by ID </strong></p>
<p><span style="color:#0000ff;"><strong>FilteredData.RowFilter = </strong><strong>&#8220;ID = &#8220;</strong><strong> &amp; </strong><strong>Me</strong><strong>.tstxtID.Text</strong></span></p>
<p><strong>&#8217;setting the name and value properties of the</strong></p>
<p><strong>&#8216;ReportDataSource Object</strong></p>
<p><span style="color:#0000ff;"><strong>DS.Name = </strong><strong>&#8220;EmployeesDataSet_Employees&#8221;</strong></span></p>
<p><strong><span style="color:#0000ff;">DS.Value = FilteredData</span></strong></p>
<p><strong>&#8216;Removing the current Datasources of the report</strong></p>
<p><strong><span style="color:#0000ff;">ReportViewer1.LocalReport.DataSources.RemoveAt(0)</span></strong></p>
<p><strong>&#8216;adding the new report DataSource object</strong></p>
<p><strong><span style="color:#0000ff;">ReportViewer1.LocalReport.DataSources.Add(DS)</span></strong></p>
<p><strong>&#8216;Viewing the data on the ReportViewer</strong></p>
<p><span style="color:#0000ff;"><strong>Me</strong><strong>.ReportViewer1.RefreshReport()</strong></span></td>
</tr>
</tbody>
</table>
<p> </p>
<p></span></div>
<p><span style="font-size:x-small;"><br />
</span></p>
<p></span></span></div>
</div>
<p>وقد وضعت تعليقات توضح الكود جيدا ، الفكرة في الكود اننا قمنا بعمل Replace لكائن الـ ReportDataSource بآخر جديد تم اعطاؤه سجل واحد فقط One Row Only لذلك سيتم عرض سجل واحد فقط على التقرير</p>
<p>في الرابط التالي <a href="http://vb4arab.com/vb/uploaded/486/11219077530.rar" target="_blank"><span style="color:#22229c;">المثال كاملا</span></a></p>
<p>تحياتي</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/alnabhani.wordpress.com/57/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/alnabhani.wordpress.com/57/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/alnabhani.wordpress.com/57/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/alnabhani.wordpress.com/57/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/alnabhani.wordpress.com/57/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/alnabhani.wordpress.com/57/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/alnabhani.wordpress.com/57/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/alnabhani.wordpress.com/57/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/alnabhani.wordpress.com/57/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/alnabhani.wordpress.com/57/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/alnabhani.wordpress.com/57/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/alnabhani.wordpress.com/57/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=alnabhani.wordpress.com&blog=454111&post=57&subd=alnabhani&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://alnabhani.wordpress.com/2008/08/18/one-row-report-2/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">alnabhani</media:title>
		</media:content>
	</item>
	</channel>
</rss>