سلام دوستان
چگونه میشه با استفاده از مقدار یک تکست باکس اطلاعات درون یک ریپورت رو فیلتر کرد؟؟؟
با تشکر
اون ReportViewer به یک BindingSource متصله، اون BindingSource هم داده ها رو توسط یک DataAdapter خوانده. داده ها داخل یک یا چند DataTable
خوانده میشه. برای خوانده اطلاعات یک دستور Select ئه SQL بکار رفته که بصورت پیشفرض شامل همه رکورد ها است.
اگه کد داخل Form1_Load رو ببینید بصورت خودکار یک نمونه TableAdapter.Fill نوشته شده که این دستور Select رو اجرا می کنه. DataTable ای که
داده ها داخلش خونده میشه داخل پارانتز نوشته شده. فرضا My_DatabaseDataSet.Table_1
حالا شما می توانید هر دستور Select دیگری رو با توجه به مقدار داخل TextBox تون روی اون DataAdapter بکار ببرید و اون DataTable رو پر کنید.
تا اینجا DataTable پر شده اما ReportViewer متوجه این اتفاق نمیشه، پس در ادامه یک متد RefreshReport هم روی ReportViewer اجرا کنید تا Refresh بشه.
Dim id(0) As ReportParameter
Dim nm(0) As ReportParameter
Dim fnm(0) As ReportParameter
Dim miani(0) As ReportParameter
Dim payan(0) As ReportParameter
Dim nahaei(0) As ReportParameter
Dim i As Integer
id(0) = New ReportParameter("id", Table1DataGridView.Item(0, i).Value.ToString)
nm(0) = New ReportParameter("nm", Table1DataGridView.Item(1, i).Value.ToString)
fnm(0) = New ReportParameter("fnm", Table1DataGridView.Item(2, i).Value.ToString)
miani(0) = New ReportParameter("miani", Table1DataGridView.Item(3, i).Value.ToString)
payan(0) = New ReportParameter("payan", Table1DataGridView.Item(4, i).Value.ToString)
nahaei(0) = New ReportParameter("nahaei", Table1DataGridView.Item(5, i).Value.ToString)
Me.ReportViewer1.LocalReport.SetParameters(id)
Me.ReportViewer1.LocalReport.SetParameters(nm)
Me.ReportViewer1.LocalReport.SetParameters(fnm)
Me.ReportViewer1.LocalReport.SetParameters(miani)
Me.ReportViewer1.LocalReport.SetParameters(payan)
Me.ReportViewer1.LocalReport.SetParameters(nahaei)
Me.ReportViewer1.RefreshReport()
ممنون. اما خوب نحوه انجام این کارو نمیدونم. چجوری و چگونه مقدار textbox رو به ریپورت پاس بدم که دیتا ها رو فیلتر کنه؟؟؟
البته راهی که بنده استفاده کردم و خوب جواب نداد اینه:
کد:Dim id(0) As ReportParameter Dim nm(0) As ReportParameter Dim fnm(0) As ReportParameter Dim miani(0) As ReportParameter Dim payan(0) As ReportParameter Dim nahaei(0) As ReportParameter Dim i As Integer id(0) = New ReportParameter("id", Table1DataGridView.Item(0, i).Value.ToString) nm(0) = New ReportParameter("nm", Table1DataGridView.Item(1, i).Value.ToString) fnm(0) = New ReportParameter("fnm", Table1DataGridView.Item(2, i).Value.ToString) miani(0) = New ReportParameter("miani", Table1DataGridView.Item(3, i).Value.ToString) payan(0) = New ReportParameter("payan", Table1DataGridView.Item(4, i).Value.ToString) nahaei(0) = New ReportParameter("nahaei", Table1DataGridView.Item(5, i).Value.ToString) Me.ReportViewer1.LocalReport.SetParameters(id) Me.ReportViewer1.LocalReport.SetParameters(nm) Me.ReportViewer1.LocalReport.SetParameters(fnm) Me.ReportViewer1.LocalReport.SetParameters(miani) Me.ReportViewer1.LocalReport.SetParameters(payan) Me.ReportViewer1.LocalReport.SetParameters(nahaei) Me.ReportViewer1.RefreshReport()
که فقط یه سطر رو تو Table مکررا تکرار میکنه. البته قبلش توسط Text box دیتا هارو تو data grid view سرچ میکنم بعد میخام همونا نمایش داده بشن
نمیدونم چرا فقط یک سطر رو نمایش میده تا آخر
ممنونم اگه دقیق تر راهنماییم کنید
به ReportViewer ارسال نکنید، اون ReportParameter ها کاربرد هایی مثل نمایش یک عنوان مشخص یا تغییر در نحوه نمایش گزارش دارند.
اما ربطی به جدول داده هایی که قراره در گزارش نشون داده بشه ندارند، چون خود ReportViewer در فیلتر کردن داده ها دخالتی نداره.
ReportParameter برای این منظور مناسب نیست، فیلتر کردن داده ها رو DataAdapter انجام میده، کاملا مستقل از ReportViewer و ReportParameter هایش.
مثال پیوستی رو ببینید. یک مجموعه داده ای DataSet1 تعریف کرده ام که یک جدول DataTable1 داره، با دو فیلد Model و Company
روی فرم یک DataGridView داریم که قراره کل داده های ما رو نشون بده و یک BindingNavigator هم داره که برای ویرایش کردنش بکار میره.
این DataGridView داده ها رو بصورت کامل نشون میده (بدون فیلتر) و محتویات اش قابل ویرایش است. این محتویات در DataSetA نگهداری میشه و
توسط BindingSourceA به BindingNavigator و DataGridView انتقال داده میشه.
ReportViewer ای هم داریم که قراره داده ها رو بصورت فیلتر شده نشون بده، به همین جهت مستقیما از DataSetA استفاده نمی کنه. یک DataSetB برایش
در نظر می گیریم که فقط داده های فیلتر شده داخلش قرار بگیره و داده ها توسط BindingSourceB به ReportViewer منتقل بشه.
اگر شما در TextBox مورد نظر متنی مثل A یا 4 یا C2 (با حروف بزرگ) بنویسید، فقط سطر هایی از DataSetA در DataSetB کپی می شوند که اون عبارت فیلتر
در فیلد های Company یا Model شون موجود باشه.
مشاهده پیوست 95236
واقعن ممنون از این ایده ی خوب
اما من با Visual studio 2010 کار میکنم
هنگام convert این پروژ ب خوبی کار نکرد
ممنون میشم اگه نسخه مربوطه رو بذاری
مشکل مربوط به نسخه microsoft.reportviewer.common و microsoft.reportviewer.winforms است که برای reportviewer لازمه و در پروژه جزو references ها است.
در visual studio 2008 نسخه 9.0 شون به پروژه اضافه میشه که در هنگام تبدیل نسخه به 2010 تغییری نمی کنه و با visual studio 2010 سازگار نیست.
در visual studio 2010 باید از نسخه 10.0 شون استفاده بشه.
مشاهده پیوست 95271