الرئيسية > برمجة التقارير > عمل تقرير لعرض سجل معين – 2

عمل تقرير لعرض سجل معين – 2

في المرة الماضية عندما طرحت التدوينة : عمل تقرير لعرض سجل معين ذكرت طريقة حل تلك المشكلة باستخدام الباراميترات ، البعض قد يستصعبها ، والبعض قد يسأل من منظور تحسين الكفاءة : لماذا نقوم بتحميل البيانات في الذاكرة ( قد تكون بالآلاف ) طول وقت عرض التقرير  بينما نحن نحتاج الى سجل واحد فقط ؟ سؤال جميل جدا بل مهم واعتقد ان من يسال سؤال كهذا هو من المبرمجين الذين يهمهم ان يعمل برنامجهم بأقل ثقل على الذاكرة .


الطريقة الأخرى اسهل اذا اردنا مجرد عرض سجل واحد فقط ، وهي عمل Filter للبيانات في مصدر التقرير قبل ان تصل التقرير، طبعا بمجرد قيامك بإضافة اداة ReportViewer وتحديد تقرير معين موجود في المشروع سيتم اضافة عدة ادوات تلقائيا الى النافذة منها Dataset,TableAdapter,bindingSource ، فعملية الوصول الى مصدر البيانات من خلال الكود سهله جدا .

الفكرة هنا اننا سنقوم بعمل كائن DataView نستخدمه في فلترة البيانات حسب الحقل المميز للمصدر والذي يكون في العادة ID ، بعد ذلك نقوم بحذف كائن الـ ReportDataSource الخاص بالكائن ReportViewer.LocalReport ، ونضيف كائن جديد نعمله بانفسنا .

في حالتي استخدم الجدول Employees من قاعدة البيانات Northwind ولدي Dataset بالإسم EmployeesDataset وفي التقرير مصدر البيانات DataSource اسمه EmployeesDataset_Employees ،وقد اضفت الى النافذة المطلوبة شريط ادوات ToolStrip به أداة Label,TextBox,Button ليقوم المستخدم بإدخال الـ ID ،

بالنسبه للكود ، فقد قمت بحذف السطر التالي من الحدث Load للنافذة :

رمز:

Me.ReportViewer1.RefreshReport()

ثم قمت بإستيراد فضاء الأسماء :

رمز:

Imports Microsoft.Reporting.WinForms

وفي حدث النقر Click للزر المدعو tsbtnshowReport :

‘adding new ReportDataSource objectDim DS AsNew ReportDataSource

‘making new DataViewObject to get the data and filter it

Dim FilteredData AsNew DataView(Me.EmployeesDataSet.Employees)

‘filtering the data by ID

FilteredData.RowFilter = “ID = “ & Me.tstxtID.Text

‘setting the name and value properties of the

‘ReportDataSource Object

DS.Name = “EmployeesDataSet_Employees”

DS.Value = FilteredData

‘Removing the current Datasources of the report

ReportViewer1.LocalReport.DataSources.RemoveAt(0)

‘adding the new report DataSource object

ReportViewer1.LocalReport.DataSources.Add(DS)

‘Viewing the data on the ReportViewer

Me.ReportViewer1.RefreshReport()

 


وقد وضعت تعليقات توضح الكود جيدا ، الفكرة في الكود اننا قمنا بعمل Replace لكائن الـ ReportDataSource بآخر جديد تم اعطاؤه سجل واحد فقط One Row Only لذلك سيتم عرض سجل واحد فقط على التقرير

في الرابط التالي المثال كاملا

تحياتي

  1. أسامة عبد السلام المسيدى
    أكتوبر 26, 2009 الساعة 4:58 م

    الاخ النبهانى

    أرجو مساعدتى فى عمل نموذج استطيع من خلاله التحكم فى عدد استيكرات البار كود التى أريد طباعتها فمثلا لو كان لدى على النموذج تكست لكتابة الرقم العشرى المراد تحويله لرقم الباركود ثم ليبل أقوم من خلاله بتحويل الرقم المكتوب بالتكست الى رقم باركود فى الليبل ثم تكست آخر أقوم من خلاله بوضع رقم استيكرات الباركود التى أريد طباعتها وبالضغط على زرار بتون تتم عملية الطباعه من خلال تقرير معمول بالريبورت فيور يظهر لى عدد استيكرات الباركود التى أريد طباعتها و الحقيقه فى المشكله التى أقابلها لاأعرف كيف أتحكم فى التقرير حتى يظهر لى رقم استيكرات الباركود المراد طباعتها فمثلا لو كتبت فى التكست اننى أريد طباعة 70 استيكر من أى رقم يتم ادخاله و استخدمت بارميتر مع التقرير كيف سيتم تكرار نفس الاستيكر 70 مره على ورقة طباعه A4 عاديه وهل أقوم باضافة تكست بوكس واحد الى التقرير و أضع فيه البارميتر الذى أكتبه فى النموذج فالكود الذى أطلبه تحديدا هو تكرار عدد التكست الواحد فى التقرير أى تكرار عدد الصفوف و الاعمده لنفس التكس بوكس حتى أحصل على العدد المراد طباعته وهو 70

    أرجو من سيادتكم الرد

    • أسامة عبد السلام المسيدى
      يناير 30, 2010 الساعة 8:44 م

      ارجو الرد

  2. فبراير 5, 2010 الساعة 6:18 م

    جزيت خيراً

  3. مايو 26, 2010 الساعة 8:10 ص

    أعجبني الدرس الخاص ب عمل تقرير لعرض سجل معين . وبقي معي استفسار لطباعة التقرير المعروض .. للأسف يبدوا أن التقرير لا يطبع التقرير الخاص بالسجل المعين بل يطبع جميع التقارير.. هل بالإمكان حل هذه المشكلة؟ بانتظالر الرد..

  4. يونيو 8, 2010 الساعة 11:15 م

    السلام عليكم

    اخي الخليل ، لم افهم قصدك ، حيث يتم عرض سجل واحد ، او السجل الذي انطبق عليه الشرط وبالتالي لايوجد بيانات غيرها في البيانات الخاصة بالتقرير فعند معاينه التقرير او الرغبة في طباعته لن يتم طباعة غيرها !!

    ارجو توضيح طلبك اكثر .

    سلامي لكلية التجارة !

  5. يونيو 13, 2010 الساعة 12:11 ص

    شكراً على الرد .. يبدو أن الضغط على زر معاينة قبل الطباعة ثم منها الضغط على زر الطباعة هو سبب طباعة جميع التقارير .. لكن الضغط على زر الطباعة دون المرور على المعاينة يؤدي لطباعة التقرير المعروض .. لذا فربما يفي بالغرض.

  1. No trackbacks yet.

أضف تعليقاً

إملأ الحقول أدناه بالمعلومات المناسبة أو إضغط على إحدى الأيقونات لتسجيل الدخول:

WordPress.com Logo

أنت تعلق بإستخدام حساب WordPress.com. تسجيل خروج   / تغيير )

صورة تويتر

أنت تعلق بإستخدام حساب Twitter. تسجيل خروج   / تغيير )

Facebook photo

أنت تعلق بإستخدام حساب Facebook. تسجيل خروج   / تغيير )

Google+ photo

أنت تعلق بإستخدام حساب Google+. تسجيل خروج   / تغيير )

Connecting to %s

%d مدونون معجبون بهذه: