محدود کردن نمایش در reportviewer

nafiseh_hch

Member
سلام
من یک گزارش با Report viewer گرفتم میخوام شرطی بذارم که فیلدهای خالی را اصلاً نمایش ندهد
این امکان برای خود Report viewer هست که گزارش رو محدود کنیم؟
من حتی view ساختم و خواستم فقط اونو بیارم ولی نشد
و Error داد.
ممنون میشم راهنماییم کنید
 

the_king

مدیرکل انجمن
سلام
من یک گزارش با Report viewer گرفتم میخوام شرطی بذارم که فیلدهای خالی را اصلاً نمایش ندهد
این امکان برای خود Report viewer هست که گزارش رو محدود کنیم؟
من حتی view ساختم و خواستم فقط اونو بیارم ولی نشد
و Error داد.
ممنون میشم راهنماییم کنید

منظورتون رو از اینکه فیلد های خالی را نشان ندهد متوجه نمی شوم، اگه یک فیلدی مثلا string.Empty باشد
طبیعتا یک کادر خالی نشان می دهد. به هر حال شما می توانید ابتدا یک کنترل BindingSource روی فرم قرار دهید
و در کنترل ReportViewer تان Choose DataSources کنید و روی شیء BindingSource تان تنظیم نمایید.

بعد با کد نویسی یک شیء از نوع DataTable بسازید، یا بصورت دستی با Add سطر به سطر پر اش کنید و یا
توسط بانک اطلاعاتی با آداپتور و تابع ()GetData پر اش کنید. در ادامه با هر شرطی که تمایل دارید
هر تعداد سطری که خواستید از داخل DataTable تان Delete کنید یا تغییر دهید.

در نهایت هم با کد نویسی مشخصه DataSource کنترل BindingSource را روی DataTable تان تنظیم کنید.

این مثال پیوستی رو ببینید، فقط سطر هایی رو نمایش میده که FirstName شون با حرف a شروع بشه :
ReportViewerVB.zip
 

پیوست ها

  • ReportViewerVB.zip
    103.9 کیلوبایت · بازدیدها: 49

nafiseh_hch

Member
مثالی که پیوست کردید با چه فرمتی هستش؟

میخوام گزارشم رکورد هایی که مثلاً field1 آن ها خالی هست اصلاً توی گزارش اون رکورد نیاد
در واقع می خوام یک Query به reportview بفرستم
 
آخرین ویرایش:

the_king

مدیرکل انجمن
مثالی که پیوست کردید با چه فرمتی هستش؟

میخوام گزارشم رکورد هایی که مثلاً field1 آن ها خالی هست اصلاً توی گزارش اون رکورد نیاد
در واقع می خوام یک Query به reportview بفرستم

چه فرمتی؟ یک پروژه کامل Visual Studio 2008 است که zip شده، نکنه شما هم با داونلود کردن فایل های zip مشکل دارید؟

مشکل در دانلود فایل zip

می توانید مثل مثال قبلی عمل کنید و بجای شرط If row.FirstName.StartsWith("a") Then از شرط زیر استفاده کنید :
کد:
            If String.IsNullOrEmpty(row.field1) = False Then
                rows.Add(row)
            End If
 

nafiseh_hch

Member
من همون کاری که شما توضیح دادید انجام دادم ولی پیغام زیر رو میده
The value for column 'comptxt2' in table 'Comission01' is DBNull.​
کد:
[SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]Dim[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] adapter [/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]As[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]New[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] nhDataSetTableAdapters.Comission01TableAdapter[/SIZE]
[SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]Dim[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] table [/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]As[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] nhDataSet.Comission01DataTable = adapter.GetData()[/SIZE]
[SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]Dim[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] rows [/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]As[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]New[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] List([/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]Of[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] nhDataSet.Comission01Row)[/SIZE]
[SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]For[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]Each[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] row [/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]As[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] nhDataSet.Comission01Row [/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]In[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] table.Rows[/SIZE]
[SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]If[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]String[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2].IsNullOrEmpty(row.comptxt2) = [/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]False[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]Then[/COLOR][/SIZE]
[/COLOR][/SIZE][SIZE=2]rows.Add(row)[/SIZE]
[SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]End[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]If[/COLOR][/SIZE]
[/COLOR][/SIZE][SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]Next[/COLOR][/SIZE]
[/COLOR][/SIZE][SIZE=2]Comission01BindingSource.DataSource = rows[/SIZE]
[SIZE=2][COLOR=#0000ff][SIZE=2][COLOR=#0000ff]Me[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2].ReportViewer1.RefreshReport()[/SIZE]

جدولم فیلدهایی داره که null هستند که خود db گذاشته
وقتی این null هارو پاک می کنم و یا پر میکنم درست اجرا می شه
ولی اینجوری نباید باشه
از
کد:
TryCast(Object , DataType)
ST = TryCast(SomeObject,String)
استفاده کردم ولی نشد
 
آخرین ویرایش:

the_king

مدیرکل انجمن
من همون کاری که شما توضیح دادید انجام دادم ولی پیغام زیر رو میده
The value for column 'comptxt2' in table 'Comission01' is DBNull.​

جدولم فیلدهایی داره که null هستند که خود db گذاشته
وقتی این null هارو پاک می کنم و یا پر میکنم درست اجرا می شه
ولی اینجوری نباید باشه
از
کد:
TryCast(Object , DataType)
ST = TryCast(SomeObject,String)
استفاده کردم ولی نشد

کد:
Dim adapter As New nhDataSetTableAdapters.Comission01TableAdapter
Dim table As nhDataSet.Comission01DataTable = adapter.GetData()
Dim rows As New List(Of nhDataSet.Comission01Row)
For Each row As nhDataSet.Comission01Row In table.Rows
[B][COLOR="Blue"]    If IsDBNull(row.comptxt2) = False Then[/COLOR][/B]
        If String.IsNullOrEmpty(row.comptxt2) = False Then
            rows.Add(row)
        End If
[B][COLOR="Blue"]    End If[/COLOR][/B]
Next
Comission01BindingSource.DataSource = rows
Me.ReportViewer1.RefreshReport()
 

nafiseh_hch

Member
واقعاً ممنونم که اینقد خوب جواب میدید:rose:
بازم همون error رو میده

مشکلش از کجا می تونه باشه؟
 

the_king

مدیرکل انجمن
واقعاً ممنونم که اینقد خوب جواب میدید:rose:
بازم همون error رو میده

مشکلش از کجا می تونه باشه؟

تا محتویات Table رو نبینم نمی تونم نظری بدم، این شیوه اصولی نیست اما امتحانش کنید :
کد:
Dim adapter As New nhDataSetTableAdapters.Comission01TableAdapter
Dim table As nhDataSet.Comission01DataTable = adapter.GetData()
Dim rows As New List(Of nhDataSet.Comission01Row)
For Each row As nhDataSet.Comission01Row In table.Rows
[B][COLOR="Blue"]    Try[/COLOR][/B]
        If IsDBNull(row.comptxt2) = False Then
            If String.IsNullOrEmpty(row.comptxt2) = False Then
                rows.Add(row)
            End If
        End If
[B][COLOR="Blue"]    Catch ex As Exception
    End Try[/COLOR][/B]
Next
Comission01BindingSource.DataSource = rows
Me.ReportViewer1.RefreshReport()
 

nafiseh_hch

Member
ممنووووووووونم
درست شد
منظورتون از اصولی نیست چیه؟؟؟
ینی ممکنه وسط کار ایراد بگیره؟
اطلاعات comptxt2 من فقط یکسری متن هستش
و اگر اون متن وارد نشه پیش فرض خود DB که Null هستش توی خود دیتابیس قرار می گیره
نوع comptxt2 (ntext) است
بازم تشکر بخاطر همهی راهنمایی های سریع و خوبتون
 

the_king

مدیرکل انجمن
ممنووووووووونم
درست شد
منظورتون از اصولی نیست چیه؟؟؟
ینی ممکنه وسط کار ایراد بگیره؟
اطلاعات comptxt2 من فقط یکسری متن هستش
و اگر اون متن وارد نشه پیش فرض خود DB که Null هستش توی خود دیتابیس قرار می گیره
نوع comptxt2 (ntext) است
بازم تشکر بخاطر همهی راهنمایی های سریع و خوبتون

نه، ایرادی نیست، منظورم از اینکه اصولی نیست اینه که یک مشکلی که قطعا راه حل مناسبی داشته با یک
شیوه غیر معمول بر طرف کردیم. مشکل رفع شده اما کد می تونست بهتر از این باشه.

کد اصولی طوری نوشته میشه که خطا ها رو پیشبینی و از بروز خطا جلوگیری کنه، نه اینکه اول اجازه بده که خطا رخ بده
و بعد که خطا رخ داد چاره کنه.

از Try و Catch زمانی استفاده می کنند که موردی از کنترل ما خارجه و مجبوریم برای خطا هایی که ممکنه رخ بده
کد هایی رو اضافه کنیم. مثلا وقتی می خواهیم یک فایل رو باز کنیم که ممکنه دسترسی بهش امکان پذیر نباشه
ناچاریم که از Try استفاده کنیم تا اگر خطایی رخ داد برنامه متوقف نشه.
اینکه یک مقداری Null باشه را می توانستیم کنترل کنیم و نیازی به Try و Catch نبود، اما چون نتوانستیم شرط
مناسب رو قرار بدیم به Try Catch متوسل شدیم.
 

جدیدترین ارسال ها

بالا