الناشر
08-28-2008, 02:05 PM
عمل تقرير MasterDetails بواسطة أداة تقارير Visual Studio
كثيرا ما نحتاج الى عمل تقرير من نوع Master Details حيث يكون لدينا جدولان مرتبطان بعلاقة One to Many . في هذا المقال اتناول كيفية عمل تقارير بهذا الشكل .
المرحلة الاولى : تهيئة الإتصال بقاعدة البيانات وكائن الـ Dataset :
سأستخدم في هذا المثال قاعدة البيانات Northwind كالعادة ، والجدولان Orders,OrderDetails تحديدا ( لا شيء مختلف حتى هنا ) وسم الـ Dataset الجديد كما يحلو لك فلن احتاجه في شرحي ( عجيبه اليس كذلك !! ) . الآن توجه الى الـ Datset لنقوم هناك ببعض التعديلات ونبدأ " العربدة " !
ما سنقوم به هو اضافة TableAdapter وهو ما يشبه الجدول الافتراضي Virtual Table نضيف للـ Dataset بأنفسنا وننفذ عليه جمله استعلام SQL كما يحلو لنا ، فهو مثل الـ View في SQL Server او Query في Access ، نقوم فيها بتحديد كافة الحقول المطلوب عرضها في التقرير من الجدولين الاب والإبن معا ، وبدون هذا لن تفلح في الشروع بالعمل واحفظ ساعات من التجارب قضيتها بلا جدوى !
الآن للعمل ، ولنضف كائن Table Adapter جديد :
http://img293.imageshack.us/img293/9838/tableadapternn9.jpg
من المعالج الظاهر انقر على زر Next مرتين ، ثم في المرحلة الثالثة منه ضع جملة SQL التالية :
SELECT (http://search.microsoft.com/default.asp?so=RECCNT&siteid=us%2Fdev&p=1&nq=NEW&qu=SELECT&IntlSearch=&boolean=PHRASE&ig=01&i=09&i=99) Orders.[Order (http://search.microsoft.com/default.asp?so=RECCNT&siteid=us%2Fdev&p=1&nq=NEW&qu=Order&IntlSearch=&boolean=PHRASE&ig=01&i=09&i=99) ID], Orders.[Customer ID], Orders.[Order (http://search.microsoft.com/default.asp?so=RECCNT&siteid=us%2Fdev&p=1&nq=NEW&qu=Order&IntlSearch=&boolean=PHRASE&ig=01&i=09&i=99) Date (http://search.microsoft.com/default.asp?so=RECCNT&siteid=us%2Fdev&p=1&nq=NEW&qu=Date&IntlSearch=&boolean=PHRASE&ig=01&i=09&i=99)], Orders.[Shipped Date (http://search.microsoft.com/default.asp?so=RECCNT&siteid=us%2Fdev&p=1&nq=NEW&qu=Date&IntlSearch=&boolean=PHRASE&ig=01&i=09&i=99)], [Order (http://search.microsoft.com/default.asp?so=RECCNT&siteid=us%2Fdev&p=1&nq=NEW&qu=Order&IntlSearch=&boolean=PHRASE&ig=01&i=09&i=99) Details].[Order (http://search.microsoft.com/default.asp?so=RECCNT&siteid=us%2Fdev&p=1&nq=NEW&qu=Order&IntlSearch=&boolean=PHRASE&ig=01&i=09&i=99) ID] AS (http://search.microsoft.com/default.asp?so=RECCNT&siteid=us%2Fdev&p=1&nq=NEW&qu=AS&IntlSearch=&boolean=PHRASE&ig=01&i=09&i=99) Expr1, [Order (http://search.microsoft.com/default.asp?so=RECCNT&siteid=us%2Fdev&p=1&nq=NEW&qu=Order&IntlSearch=&boolean=PHRASE&ig=01&i=09&i=99) Details].ID,[Order (http://search.microsoft.com/default.asp?so=RECCNT&siteid=us%2Fdev&p=1&nq=NEW&qu=Order&IntlSearch=&boolean=PHRASE&ig=01&i=09&i=99) Details].[Product ID], [Order (http://search.microsoft.com/default.asp?so=RECCNT&siteid=us%2Fdev&p=1&nq=NEW&qu=Order&IntlSearch=&boolean=PHRASE&ig=01&i=09&i=99) Details].Quantity, [Order (http://search.microsoft.com/default.asp?so=RECCNT&siteid=us%2Fdev&p=1&nq=NEW&qu=Order&IntlSearch=&boolean=PHRASE&ig=01&i=09&i=99) Details].[Unit Price]FROM (http://search.microsoft.com/default.asp?so=RECCNT&siteid=us%2Fdev&p=1&nq=NEW&qu=FROM&IntlSearch=&boolean=PHRASE&ig=01&i=09&i=99) (Orders INNER (http://search.microsoft.com/default.asp?so=RECCNT&siteid=us%2Fdev&p=1&nq=NEW&qu=INNER&IntlSearch=&boolean=PHRASE&ig=01&i=09&i=99) JOIN (http://search.microsoft.com/default.asp?so=RECCNT&siteid=us%2Fdev&p=1&nq=NEW&qu=JOIN&IntlSearch=&boolean=PHRASE&ig=01&i=09&i=99)[Order (http://search.microsoft.com/default.asp?so=RECCNT&siteid=us%2Fdev&p=1&nq=NEW&qu=Order&IntlSearch=&boolean=PHRASE&ig=01&i=09&i=99) Details] ON (http://search.microsoft.com/default.asp?so=RECCNT&siteid=us%2Fdev&p=1&nq=NEW&qu=ON&IntlSearch=&boolean=PHRASE&ig=01&i=09&i=99) Orders.[Order (http://search.microsoft.com/default.asp?so=RECCNT&siteid=us%2Fdev&p=1&nq=NEW&qu=Order&IntlSearch=&boolean=PHRASE&ig=01&i=09&i=99) ID] = [Order (http://search.microsoft.com/default.asp?so=RECCNT&siteid=us%2Fdev&p=1&nq=NEW&qu=Order&IntlSearch=&boolean=PHRASE&ig=01&i=09&i=99) Details].[Order (http://search.microsoft.com/default.asp?so=RECCNT&siteid=us%2Fdev&p=1&nq=NEW&qu=Order&IntlSearch=&boolean=PHRASE&ig=01&i=09&i=99) ID])بعدها تنهي المعالج مباشرة بالضغط على زر Finish ، وتأكد من ان اسم الجدول الجديد هو Order_Details_Report وبهذا تنتهي هذه المرحلة وننتقل الى المرحلة التالية :
المرحلة الثانية : تصميم التقرير :
الآن نقوم بتصميم التقرير وهي مرحلة تحتوي العديد من الخطوات الصغيرة والسهله ، نقوم اولا بتحديد مصدر البيانات report Data Source ليكون الجدول الإفتراضي الذي انشاناه في المرحلة السابقة ونسبه الكامل OrdersDataSet_Order_Details_Report .
ثم نقوم بإضافة أداة List جديدة الى جسم التقرير ، ثم نقوم بتعديل الخاصيه DatasetName لتكون OrdersDataSet_Order_Details_Report ثم نعدل الخاصيه Grouping ونضع الحقل OrderID كمفتاح تجميع كما بالصورة التالية :
http://img187.imageshack.us/img187/9416/groupeditingfv7.gif
بعدها نضيف الحقول OrderId,CustomerId,OrderDate,ShippedDate الى داخل الـ List ، ثم نقوم بإضافة اداة Table لعرض البيانات الفرعيه وهي الحقول ProductID,Quantity,UnitPrice وذلك بسحب هذه الحقول من نافذة الـ Datasources ( الظاهره في الزاوية اليمنى العلوية من الصورة السابقة )الى الجدول مباشرة . بعدها ننتقل الى الزاوية العلوية اليسرى من اداة الجدول ونضغط بالزر الايمن عليه ونختار Properties من القائمة التي تظهر ، ثم انتقل الى التبويب Groups بعدها انقر على رز Edit Details Group واجعل الحقل ProductID ليكون مفتاح تجميع القيم في اداة الجدول .
الصورة التالية توضح الخطوتين السابقتين :
http://img514.imageshack.us/img514/1888/tabledetailsgrouptt1.gif
الخطوة التالية : لا لا يوجد أي خطوات فقد انتهى كل شيء كل ما عليك هو وضع اداة Report Viewer على احد النوافذة windows Forms وعرض التقرير عليها لترى النتيجة شامخة :
http://img234.imageshack.us/img234/3337/finalreportnd4.gif
واذا كنت مستوعبا لما ذكرناه هنا ، وما ذكرناه حول عمل تقرير لسجل معين ، فيمكنك ان تقوم بعمل تقرير MasterDetails لأي سجل مراد بكل سهوله واترك هذا لكم لتكتشفوه في المرفق .
تحياتي
http://feeds.wordpress.com/1.0/categories/alnabhani.wordpress.com/68/ http://feeds.wordpress.com/1.0/tags/alnabhani.wordpress.com/68/ http://feeds.wordpress.com/1.0/comments/alnabhani.wordpress.com/68/ (http://feeds.wordpress.com/1.0/gocomments/alnabhani.wordpress.com/68/) http://feeds.wordpress.com/1.0/delicious/alnabhani.wordpress.com/68/ (http://feeds.wordpress.com/1.0/godelicious/alnabhani.wordpress.com/68/) http://feeds.wordpress.com/1.0/stumble/alnabhani.wordpress.com/68/ (http://feeds.wordpress.com/1.0/gostumble/alnabhani.wordpress.com/68/) http://feeds.wordpress.com/1.0/digg/alnabhani.wordpress.com/68/ (http://feeds.wordpress.com/1.0/godigg/alnabhani.wordpress.com/68/) http://feeds.wordpress.com/1.0/reddit/alnabhani.wordpress.com/68/ (http://feeds.wordpress.com/1.0/goreddit/alnabhani.wordpress.com/68/) http://stats.wordpress.com/b.gif?host=alnabhani.wordpress.com&blog=454111&post=68&subd=alnabhani&ref=&feed=1
منقول ... (http://alnabhani.wordpress.com/2008/08/20/master-details-report/)
كثيرا ما نحتاج الى عمل تقرير من نوع Master Details حيث يكون لدينا جدولان مرتبطان بعلاقة One to Many . في هذا المقال اتناول كيفية عمل تقارير بهذا الشكل .
المرحلة الاولى : تهيئة الإتصال بقاعدة البيانات وكائن الـ Dataset :
سأستخدم في هذا المثال قاعدة البيانات Northwind كالعادة ، والجدولان Orders,OrderDetails تحديدا ( لا شيء مختلف حتى هنا ) وسم الـ Dataset الجديد كما يحلو لك فلن احتاجه في شرحي ( عجيبه اليس كذلك !! ) . الآن توجه الى الـ Datset لنقوم هناك ببعض التعديلات ونبدأ " العربدة " !
ما سنقوم به هو اضافة TableAdapter وهو ما يشبه الجدول الافتراضي Virtual Table نضيف للـ Dataset بأنفسنا وننفذ عليه جمله استعلام SQL كما يحلو لنا ، فهو مثل الـ View في SQL Server او Query في Access ، نقوم فيها بتحديد كافة الحقول المطلوب عرضها في التقرير من الجدولين الاب والإبن معا ، وبدون هذا لن تفلح في الشروع بالعمل واحفظ ساعات من التجارب قضيتها بلا جدوى !
الآن للعمل ، ولنضف كائن Table Adapter جديد :
http://img293.imageshack.us/img293/9838/tableadapternn9.jpg
من المعالج الظاهر انقر على زر Next مرتين ، ثم في المرحلة الثالثة منه ضع جملة SQL التالية :
SELECT (http://search.microsoft.com/default.asp?so=RECCNT&siteid=us%2Fdev&p=1&nq=NEW&qu=SELECT&IntlSearch=&boolean=PHRASE&ig=01&i=09&i=99) Orders.[Order (http://search.microsoft.com/default.asp?so=RECCNT&siteid=us%2Fdev&p=1&nq=NEW&qu=Order&IntlSearch=&boolean=PHRASE&ig=01&i=09&i=99) ID], Orders.[Customer ID], Orders.[Order (http://search.microsoft.com/default.asp?so=RECCNT&siteid=us%2Fdev&p=1&nq=NEW&qu=Order&IntlSearch=&boolean=PHRASE&ig=01&i=09&i=99) Date (http://search.microsoft.com/default.asp?so=RECCNT&siteid=us%2Fdev&p=1&nq=NEW&qu=Date&IntlSearch=&boolean=PHRASE&ig=01&i=09&i=99)], Orders.[Shipped Date (http://search.microsoft.com/default.asp?so=RECCNT&siteid=us%2Fdev&p=1&nq=NEW&qu=Date&IntlSearch=&boolean=PHRASE&ig=01&i=09&i=99)], [Order (http://search.microsoft.com/default.asp?so=RECCNT&siteid=us%2Fdev&p=1&nq=NEW&qu=Order&IntlSearch=&boolean=PHRASE&ig=01&i=09&i=99) Details].[Order (http://search.microsoft.com/default.asp?so=RECCNT&siteid=us%2Fdev&p=1&nq=NEW&qu=Order&IntlSearch=&boolean=PHRASE&ig=01&i=09&i=99) ID] AS (http://search.microsoft.com/default.asp?so=RECCNT&siteid=us%2Fdev&p=1&nq=NEW&qu=AS&IntlSearch=&boolean=PHRASE&ig=01&i=09&i=99) Expr1, [Order (http://search.microsoft.com/default.asp?so=RECCNT&siteid=us%2Fdev&p=1&nq=NEW&qu=Order&IntlSearch=&boolean=PHRASE&ig=01&i=09&i=99) Details].ID,[Order (http://search.microsoft.com/default.asp?so=RECCNT&siteid=us%2Fdev&p=1&nq=NEW&qu=Order&IntlSearch=&boolean=PHRASE&ig=01&i=09&i=99) Details].[Product ID], [Order (http://search.microsoft.com/default.asp?so=RECCNT&siteid=us%2Fdev&p=1&nq=NEW&qu=Order&IntlSearch=&boolean=PHRASE&ig=01&i=09&i=99) Details].Quantity, [Order (http://search.microsoft.com/default.asp?so=RECCNT&siteid=us%2Fdev&p=1&nq=NEW&qu=Order&IntlSearch=&boolean=PHRASE&ig=01&i=09&i=99) Details].[Unit Price]FROM (http://search.microsoft.com/default.asp?so=RECCNT&siteid=us%2Fdev&p=1&nq=NEW&qu=FROM&IntlSearch=&boolean=PHRASE&ig=01&i=09&i=99) (Orders INNER (http://search.microsoft.com/default.asp?so=RECCNT&siteid=us%2Fdev&p=1&nq=NEW&qu=INNER&IntlSearch=&boolean=PHRASE&ig=01&i=09&i=99) JOIN (http://search.microsoft.com/default.asp?so=RECCNT&siteid=us%2Fdev&p=1&nq=NEW&qu=JOIN&IntlSearch=&boolean=PHRASE&ig=01&i=09&i=99)[Order (http://search.microsoft.com/default.asp?so=RECCNT&siteid=us%2Fdev&p=1&nq=NEW&qu=Order&IntlSearch=&boolean=PHRASE&ig=01&i=09&i=99) Details] ON (http://search.microsoft.com/default.asp?so=RECCNT&siteid=us%2Fdev&p=1&nq=NEW&qu=ON&IntlSearch=&boolean=PHRASE&ig=01&i=09&i=99) Orders.[Order (http://search.microsoft.com/default.asp?so=RECCNT&siteid=us%2Fdev&p=1&nq=NEW&qu=Order&IntlSearch=&boolean=PHRASE&ig=01&i=09&i=99) ID] = [Order (http://search.microsoft.com/default.asp?so=RECCNT&siteid=us%2Fdev&p=1&nq=NEW&qu=Order&IntlSearch=&boolean=PHRASE&ig=01&i=09&i=99) Details].[Order (http://search.microsoft.com/default.asp?so=RECCNT&siteid=us%2Fdev&p=1&nq=NEW&qu=Order&IntlSearch=&boolean=PHRASE&ig=01&i=09&i=99) ID])بعدها تنهي المعالج مباشرة بالضغط على زر Finish ، وتأكد من ان اسم الجدول الجديد هو Order_Details_Report وبهذا تنتهي هذه المرحلة وننتقل الى المرحلة التالية :
المرحلة الثانية : تصميم التقرير :
الآن نقوم بتصميم التقرير وهي مرحلة تحتوي العديد من الخطوات الصغيرة والسهله ، نقوم اولا بتحديد مصدر البيانات report Data Source ليكون الجدول الإفتراضي الذي انشاناه في المرحلة السابقة ونسبه الكامل OrdersDataSet_Order_Details_Report .
ثم نقوم بإضافة أداة List جديدة الى جسم التقرير ، ثم نقوم بتعديل الخاصيه DatasetName لتكون OrdersDataSet_Order_Details_Report ثم نعدل الخاصيه Grouping ونضع الحقل OrderID كمفتاح تجميع كما بالصورة التالية :
http://img187.imageshack.us/img187/9416/groupeditingfv7.gif
بعدها نضيف الحقول OrderId,CustomerId,OrderDate,ShippedDate الى داخل الـ List ، ثم نقوم بإضافة اداة Table لعرض البيانات الفرعيه وهي الحقول ProductID,Quantity,UnitPrice وذلك بسحب هذه الحقول من نافذة الـ Datasources ( الظاهره في الزاوية اليمنى العلوية من الصورة السابقة )الى الجدول مباشرة . بعدها ننتقل الى الزاوية العلوية اليسرى من اداة الجدول ونضغط بالزر الايمن عليه ونختار Properties من القائمة التي تظهر ، ثم انتقل الى التبويب Groups بعدها انقر على رز Edit Details Group واجعل الحقل ProductID ليكون مفتاح تجميع القيم في اداة الجدول .
الصورة التالية توضح الخطوتين السابقتين :
http://img514.imageshack.us/img514/1888/tabledetailsgrouptt1.gif
الخطوة التالية : لا لا يوجد أي خطوات فقد انتهى كل شيء كل ما عليك هو وضع اداة Report Viewer على احد النوافذة windows Forms وعرض التقرير عليها لترى النتيجة شامخة :
http://img234.imageshack.us/img234/3337/finalreportnd4.gif
واذا كنت مستوعبا لما ذكرناه هنا ، وما ذكرناه حول عمل تقرير لسجل معين ، فيمكنك ان تقوم بعمل تقرير MasterDetails لأي سجل مراد بكل سهوله واترك هذا لكم لتكتشفوه في المرفق .
تحياتي
http://feeds.wordpress.com/1.0/categories/alnabhani.wordpress.com/68/ http://feeds.wordpress.com/1.0/tags/alnabhani.wordpress.com/68/ http://feeds.wordpress.com/1.0/comments/alnabhani.wordpress.com/68/ (http://feeds.wordpress.com/1.0/gocomments/alnabhani.wordpress.com/68/) http://feeds.wordpress.com/1.0/delicious/alnabhani.wordpress.com/68/ (http://feeds.wordpress.com/1.0/godelicious/alnabhani.wordpress.com/68/) http://feeds.wordpress.com/1.0/stumble/alnabhani.wordpress.com/68/ (http://feeds.wordpress.com/1.0/gostumble/alnabhani.wordpress.com/68/) http://feeds.wordpress.com/1.0/digg/alnabhani.wordpress.com/68/ (http://feeds.wordpress.com/1.0/godigg/alnabhani.wordpress.com/68/) http://feeds.wordpress.com/1.0/reddit/alnabhani.wordpress.com/68/ (http://feeds.wordpress.com/1.0/goreddit/alnabhani.wordpress.com/68/) http://stats.wordpress.com/b.gif?host=alnabhani.wordpress.com&blog=454111&post=68&subd=alnabhani&ref=&feed=1
منقول ... (http://alnabhani.wordpress.com/2008/08/20/master-details-report/)