PDA

View Full Version : سوال: Report Viewer گزارش گیری



managment-barnamenevis
شنبه 21 بهمن 1391, 22:14 عصر
سلام دوباره
دوستان من از report viewer استفاده میکنم
مشکل این کد چیه
SqlConnection conn = new SqlConnection();
conn.ConnectionString = "Data Source=MESHKI-PC;Initial Catalog=Amuzeshgah;Integrated Security=True";
conn.Open();
SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
cmd.CommandText = "Select Number,Name,LastName,Pish,Ghest1,Ghest2,Ghest3,Ghe st4 from Ghest where Number='"+textBox3.Text+"'";
SqlDataAdapter da = new SqlDataAdapter();
da.SelectCommand = cmd;
DataTable dt = new DataTable();
da.Fill(dt);
reportViewer1.LocalReport.EnableExternalImages = true;
string path = Path.GetDirectoryName(Application.ExecutablePath);
reportViewer1.LocalReport.ReportPath = path + "\\Report2";
ReportParameter [] r=new ReportParameter[8];
if (dt.Rows.Count > 0)
{
r[0] = new ReportParameter("id", dt.Rows[0][0].ToString());
r[1] = new ReportParameter("name", dt.Rows[0][1].ToString());
r[2] = new ReportParameter("lastname", dt.Rows[0][2].ToString());
r[3] = new ReportParameter("mablaghpish", dt.Rows[0][3].ToString());
r[4] = new ReportParameter("ghest1", dt.Rows[0][4].ToString());
r[5] = new ReportParameter("ghest2", dt.Rows[0][5].ToString());
r[6] = new ReportParameter("ghest3", dt.Rows[0][6].ToString());
r[7] = new ReportParameter("ghest4", dt.Rows[0][7].ToString());
reportViewer1.LocalReport.SetParameters(r);
reportViewer1.RefreshReport();
reportViewer1.LocalReport.Refresh();


اینم متن خطایی که میده

An error ocurred during local report processing.

managment-barnamenevis
شنبه 21 بهمن 1391, 22:34 عصر
کسی میدونه این خطا مربوط به چی هست
An error ocurred during local report processing.

managment-barnamenevis
شنبه 21 بهمن 1391, 22:36 عصر
An error ocurred during local report processing.

saeedgholami
یک شنبه 22 بهمن 1391, 12:27 عصر
سلام
منم این مشکل رو وقتی که با کد نویسی گزارشگیری میکردم داشتم نتونستم حلش کنم مجبور شدم از ویزارد استفاده کنم که به نظر من ساده تر و راحت تر است
موفق باشی

saeedgholami
یک شنبه 22 بهمن 1391, 12:32 عصر
این مطالب روبهتون پیشنهاد می کنم

Database

we need to create table with the following fields as shown in the next Image
http://engthunder.files.wordpress.com/2011/10/reportviewereverything_1_1.png?w=600 (http://engthunder.files.wordpress.com/2011/10/reportviewereverything_1_1.png)
and also we need to create stored procedure that returns all persons with filters on ID, Name and Mobile , by default stored procedure should return the whole data.
below is the stored procedure
Code Snippet


ALTER PROCEDURE PersonsSelectAll
(
@ID int ,
@Name nvarchar(50),
@Mobile varchar(16)
)
AS
SET NOCOUNT ON;
Declare @QueryStng nvarchar(max) =‘SELECT Id,Name,Mobile, Image FROM Persons ‘
Declare @WhereStng nvarchar(max) =‘where (1=1)’
IF @ID <> -1 begin set @WhereStng = @WhereStng + ‘ And ID = @ID ‘ end
IF @Name <> ‘-1′ begin set @WhereStng = @WhereStng + ‘ And Name Like @Name + ”%” ‘ end
IF @Mobile <> ‘-1′ begin set @WhereStng = @WhereStng + ‘ And Mobile = @Mobile ‘ end
Declare @FinalQuery nvarchar(max) = @QueryStng + @WhereStng
Declare @Parameters nvarchar(500) =‘ @ID int , @Name nvarchar(50) , @Mobile varchar(16)’
EXEC sp_Executesql @FinalQuery , @Parameters,@ID , @Name , @Mobile



Classes

We need to write the Business Logic and Data Access Classes , below is the code
Code Snippet


namespace Persons
{
///<summary>
/// Data Acess Class
///</summary>
public class DaPerson
{
///<summary>
/// Connection String
///</summary>
private static readonly string Connstring = ConfigurationManager.ConnectionStrings[0].ConnectionString;
///<summary>
/// Select all persons with filter method
///</summary>
///<param name=”id”>Id of the person (default -1) </param>
///<param name=”name”>Name of the person or first letters of his name</param>
///<param name=”mobile”>mobile number of the person</param>
///<returns>list of BlPerson object</returns>
[DataObjectMethod(DataObjectMethodType.Select, true)]
public static IEnumerable<BlPerson> SelectAll(int id, string name, string mobile)
{
var tempList = new List<BlPerson>();
var con = new SqlConnection(Connstring);
var cmd = new SqlCommand(“PersonsSelectAll”, con) { CommandType = CommandType.StoredProcedure };
cmd.Parameters.AddWithValue(“@ID”, id);
cmd.Parameters.AddWithValue(“@Name”, name);
cmd.Parameters.AddWithValue(“@Mobile”, mobile);
con.Open();
using (var dr = cmd.ExecuteReader())
{
while (dr.Read())
{
var temp = new BlPerson(
int.Parse(dr["Id"].ToString()),
dr["Name"].ToString(),
dr["Mobile"].ToString(),
dr["Image"].ToString());
tempList.Add(temp);
}
}
con.Close();
return tempList;
}
}
///<summary>
/// Business Logic Class
///</summary>
public class BlPerson
{
#region Constructors
///<summary>
/// Default Constructor
///</summary>
public BlPerson()
{
ID = -1;
Name = Mobile = Image = string.Empty;
}
///<summary>
/// Overloaded Constructor
///</summary>
///<param name=”id”>Person Id</param>
///<param name=”name”>Person Name</param>
///<param name=”mobile”>Person Mobile</param>
///<param name=”image”>Person Image</param>
public BlPerson(int id, string name, string mobile, string image)
{
ID = id;
Name = name;
Mobile = mobile;
Image = image;
}
#endregion
#region Properties
[DataObjectField(true)]
public int ID { get; set; }
public string Name { get; set; }
public string Mobile { get; set; }
public string Image { get; set; }
#endregion
}
}



Now after we prepare the database and class to access the database we need to design the report.
Report Viewer

Go to Website > Add New Item > then select Report and click Okay
http://engthunder.files.wordpress.com/2011/10/reportviewereverything_1_2.png?w=600 (http://engthunder.files.wordpress.com/2011/10/reportviewereverything_1_2.png)
Now we should add dataset , dataset will be used as datasource to the report controls
Go to Report Data > New > Dataset
http://engthunder.files.wordpress.com/2011/10/reportviewereverything_1_3.png?w=600 (http://engthunder.files.wordpress.com/2011/10/reportviewereverything_1_3.png)
You’ll get window, now put any name and select Persons as datasource and DaPerson(SelectAll) As Available Datasets
http://engthunder.files.wordpress.com/2011/10/reportviewereverything_1_4.png?w=600 (http://engthunder.files.wordpress.com/2011/10/reportviewereverything_1_4.png)
http://engthunder.files.wordpress.com/2011/10/reportviewereverything_1_5.png?w=600 (http://engthunder.files.wordpress.com/2011/10/reportviewereverything_1_5.png)
now after preparing the dataset go to toolbox drag a Table and then select your fields
http://engthunder.files.wordpress.com/2011/10/reportviewereverything_1_6.png?w=600 (http://engthunder.files.wordpress.com/2011/10/reportviewereverything_1_6.png)
to make alternate row color select the Row and then go to properties then put this code in the Background Color property
= if(RowNumber(Nothing) Mod 2 = 0, “#ffffff”, “#ebf0f5″)
you can change the colors based on your brand
http://engthunder.files.wordpress.com/2011/10/reportviewereverything_1_7.png?w=600 (http://engthunder.files.wordpress.com/2011/10/reportviewereverything_1_7.png)
To add header and footer Go to Report >Add Header , Add Footer
to add Logo image to the header , go to Image under report data and add image ( this image will be embedded in the report ) drag it to the header
in the footer add one text box and write what ever you want.
http://engthunder.files.wordpress.com/2011/10/reportviewereverything_1_8.png?w=600 (http://engthunder.files.wordpress.com/2011/10/reportviewereverything_1_8.png)
to fix or freeze the header and repeat the header on each page select the Tablix and then right click and click on properties
check the Repeat header and Keep header visible Row Headers
http://engthunder.files.wordpress.com/2011/10/reportviewereverything_1_9.png?w=600 (http://engthunder.files.wordpress.com/2011/10/reportviewereverything_1_9.png)
to activate the repeat header and keep header visible you need to make one more step From the design window Check Advance mode ( in right bottom corner near to columns Croup)
http://engthunder.files.wordpress.com/2011/10/reportviewereverything_1_10.png?w=600 (http://engthunder.files.wordpress.com/2011/10/reportviewereverything_1_10.png)
then slect the Static under Gow Groups and go to the properties set Fixed Data to True ,Keep with Group After and Repeat on new page True.
http://engthunder.files.wordpress.com/2011/10/reportviewereverything_1_11.png?w=600 (http://engthunder.files.wordpress.com/2011/10/reportviewereverything_1_11.png)
To add Parameters go to Parameters under Report Data and add one parameter with name Note , this we will pass it from the asp page.
http://engthunder.files.wordpress.com/2011/10/reportviewereverything_1_12.png?w=600 (http://engthunder.files.wordpress.com/2011/10/reportviewereverything_1_12.png)
To add image to the report from the database you can drag the image control to the image cell inside the Tablix then click on properties Select Image surce External and use Image field to feed the image control
http://engthunder.files.wordpress.com/2011/10/reportviewereverything_1_13.png?w=600 (http://engthunder.files.wordpress.com/2011/10/reportviewereverything_1_13.png)
Note : there are three way to put image in the report Imbedded like we did in the logo or external like here or from the database but it should be binary.
in case of external you need to activate enable external image, by default its false and the external image should be URL (i.e http://sample.domain/image1.jpg
Adding the report viewer

first we need to add object datasource and connect it with the same Data access class ,
after adding three textboxs in the page for filtering for ( Name , ID , and mobile ) then configure the datasource as following
Note: we should set the default values to -1.
http://engthunder.files.wordpress.com/2011/10/reportviewereverything_1_14.png?w=600 (http://engthunder.files.wordpress.com/2011/10/reportviewereverything_1_14.png)
http://engthunder.files.wordpress.com/2011/10/reportviewereverything_1_15.png?w=600 (http://engthunder.files.wordpress.com/2011/10/reportviewereverything_1_15.png)
http://engthunder.files.wordpress.com/2011/10/reportviewereverything_1_16.png?w=600 (http://engthunder.files.wordpress.com/2011/10/reportviewereverything_1_16.png)
in the toolbox you should find report viewer control under reports drag it and then choose local report and choose datasource objDsPersons
http://engthunder.files.wordpress.com/2011/10/reportviewereverything_1_17.png?w=600 (http://engthunder.files.wordpress.com/2011/10/reportviewereverything_1_17.png)
to enable external image go to Local report > Enable External Image , and set the value to true.
http://engthunder.files.wordpress.com/2011/10/reportviewereverything_1_18.png?w=600 (http://engthunder.files.wordpress.com/2011/10/reportviewereverything_1_18.png)
to pass the parameter you should write code on page load and to refresh the report when adding filter add button the code of this button and pass parameter as follows
Code Snippet


protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
ReportParameter param1 = new ReportParameter(“Note”, “this is the note text”);
ReportParameter param2 = new ReportParameter(“Parameter2″, “Parameter2 value”);
ReportParameter[] p = { param1 , param2};
rvPersons.LocalReport.SetParameters(p);
rvPersons.LocalReport.Refresh();
}
}
protected void btnRefresh_Click(object sender, EventArgs e)
{
objDsPersons.DataBind();
rvPersons.LocalReport.Refresh();
}



in a result you should see the report like the following snaps
http://engthunder.files.wordpress.com/2011/10/reportviewereverything_1_19.png?w=600 (http://engthunder.files.wordpress.com/2011/10/reportviewereverything_1_19.png)
http://engthunder.files.wordpress.com/2011/10/reportviewereverything_1_20.png?w=600 (http://engthunder.files.wordpress.com/2011/10/reportviewereverything_1_20.png)
Globalization and Branding

By default the report viewer does not has properties to change the text for the buttons and text of the design like (Next Search Page etc.) , if you want to change that text to your language for example Arabic do the following steps
add ReportViewerCustomMessages class which inherits the Microsoft.Reporting.WebForms.IReportViewerMessages and override that messages ,
i used Global resources to make it easy , then go to the web.config set global to Arabic and add
the following code
Code Snippet


<appSettings>
<addkey=“ReportViewerMessages“value=“ReportVi ewerCustomMessages, APP_CODE“/>
</appSettings>



<system.web>
<globalizationuiCulture=“ar-JO“culture=“ar-JO“/>
<httpHandlers>



below is the code
for ReportViewerCustomMessages class
Code Snippet


public class ReportViewerCustomMessages : Microsoft.Reporting.WebForms.IReportViewerMessages
{
#region IReportViewerMessages Members
public string BackButtonToolTip
{
get { return Resource.BackButtonToolTip; }
}
public string ChangeCredentialsText
{
get { return Resource.ChangeCredentialsText; }
}
public string ChangeCredentialsToolTip
{
get { return Resource.ChangeCredentialsToolTip; }
}
public string CurrentPageTextBoxToolTip
{
get { return Resource.CurrentPageTextBoxToolTip; }
}
public string DocumentMap
{
get { return Resource.DocumentMap; }
}
public string DocumentMapButtonToolTip
{
get { return Resource.DocumentMapButtonToolTip; }
}
public string ExportButtonText
{
get { return Resource.ExportButtonText; }
}
public string ExportButtonToolTip
{
get { return Resource.ExportButtonToolTip; }
}
public string ExportFormatsToolTip
{
get { return Resource.ExportFormatsToolTip; }
}
public string FalseValueText
{
get { return Resource.FalseValueText; }
}
public string FindButtonText
{
get { return Resource.FindButtonText; }
}
public string FindButtonToolTip
{
get { return Resource.FindButtonToolTip; }
}
public string FindNextButtonText
{
get { return Resource.FindNextButtonText; }
}
public string FindNextButtonToolTip
{
get { return Resource.FindNextButtonToolTip; }
}
public string FirstPageButtonToolTip
{
get { return Resource.FirstPageButtonToolTip; }
}
public string InvalidPageNumber
{
get { return Resource.InvalidPageNumber; }
}
public string LastPageButtonToolTip
{
get { return Resource.LastPageButtonToolTip; }
}
public string NextPageButtonToolTip
{
get { return Resource.NextPageButtonToolTip; }
}
public string NoMoreMatches
{
get { return Resource.NoMoreMatches; }
}
public string NullCheckBoxText
{
get { return Resource.NullCheckBoxText; }
}
public string NullValueText
{
get { return Resource.NullValueText; }
}
public string PageOf
{
get { return Resource.PageOf; }
}
public string ParameterAreaButtonToolTip
{
get { return Resource.ParameterAreaButtonToolTip; }
}
public string PasswordPrompt
{
get { return Resource.PasswordPrompt; }
}
public string PreviousPageButtonToolTip
{
get { return Resource.PreviousPageButtonToolTip; }
}
public string PrintButtonToolTip
{
get { return Resource.PrintButtonToolTip; }
}
public string ProgressText
{
get { return Resource.ProgressText; }
}
public string RefreshButtonToolTip
{
get { return Resource.RefreshButtonToolTip; }
}
public string SearchTextBoxToolTip
{
get { return Resource.SearchTextBoxToolTip; }
}
public string SelectAValue
{
get { return Resource.SelectAValue; }
}
public string SelectAll
{
get { return Resource.SelectAll; }
}
public string SelectFormat
{
get { return Resource.SelectFormat; }
}
public string TextNotFound
{
get { return Resource.TextNotFound; }
}
public string TodayIs
{
get { return Resource.TodayIs; }
}
public string TrueValueText
{
get { return Resource.TrueValueText; }
}
public string UserNamePrompt
{
get { return Resource.UserNamePrompt; }
}
public string ViewReportButtonText
{
get { return Resource.ViewReportButtonText; }
}
public string ZoomControlToolTip
{
get { return Resource.ZoomControlToolTip; }
}
public string ZoomToPageWidth
{
get { return Resource.ZoomToPageWidth; }
}
public string ZoomToWholePage
{
get { return Resource.ZoomToWholePage; }
}
#endregion
}



to change the background of the report viewer buttons i added the following style
Code Snippet


div#rvPersons_ctl05 div
{
background-color: #dee3ea;
background: -moz-linear-gradient(center top , #fff, #c4ceda) repeat scroll 0 0 #dee3ea; /*FireFox*/
filter: progid:DXImageTransform.Microsoft.gradient(startCo lorstr=’#ffffff’, endColorstr=’#C4CEDA’); /*IE*/
background: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#c4ceda)); /*Chrome Safari*/
background: -o-linear-gradient(top, #fff 0%,#c4ceda 100%); /*Opra */
text-align: center;
font-weight: bold;
color: #302e77;
}
div#rvPersons_ctl05 div div
{
background: none;
}
div#rvPersons_ctl05
{
text-align: center;
}



you can use firebug to check the name of that div
http://engthunder.files.wordpress.com/2011/10/reportviewereverything_1_21.png?w=600 (http://engthunder.files.wordpress.com/2011/10/reportviewereverything_1_21.png)
this is a snap of the output result
http://engthunder.files.wordpress.com/2011/10/reportviewereverything_1_22.png?w=600 (http://engthunder.files.wordpress.com/2011/10/reportviewereverything_1_22.png)
اینم منبعش که متاسفانه فی لتره
منبع:http://engthunder.wordpress.com/2011/10/05/everything-about-report-viewer-part-1/