Click here to Skip to main content
5,785,816 members and growing! (18,662 online)
Email Password   helpLost your password?
Web Development » ASP.NET » Howto License: The Code Project Open License (CPOL)

How to dynamically load images in Crystal Reports using Visual Studio 2005

By Redouane Mounafia

How to dynamically load images in Crystal Reports in ASP.NET, using the TypedDataSet.
C#, XML, .NET (.NET, .NET 2.0), ASP.NET

Posted: 11 Nov 2008
Updated: 19 Nov 2008
Views: 4,779
Bookmarked: 17 times
Announcements
Loading...



Search    
Advanced Search
Sitemap
6 votes for this Article.
Popularity: 2.92 Rating: 3.75 out of 5
1 vote, 16.7%
1
0 votes, 0.0%
2
0 votes, 0.0%
3
1 vote, 16.7%
4
4 votes, 66.7%
5

Introduction

If you have an image path that is stored in your database, Crystal Reports .NET in Visual Studio 2003/2005 cannot display the image file dynamically unless you use the dynamic image location feature in Crystal Report XI.

I searched in the Web, and I found how to display this using a workaround.

Using the code

We must have a field (image path) in our database. We need to create a new DataSet/XML schema (XSD) (TypedDataSet) to use as resource data in creating a report, and add an additional field that is not in the table and which is of type base64Binary:

Or add it in XML:

< name="”image_stream”" type="”xs:base64Binary”" minoccurs="”0″">

When designing a report, drag and drop the “image_stream” field in the region where you want it to appear. Add CrystalReportViewer to your ASPX page. In the code-behind of your page, add the following method to load the image:

private void LoadImage(DataRow objDataRow, string strImageField, string FilePath)
{
    try
    {
        FileStream fs = new FileStream(FilePath, 
                   System.IO.FileMode.Open, System.IO.FileAccess.Read);
        byte[] Image = new byte[fs.Length];
        fs.Read(Image, 0, Convert.ToInt32(fs.Length));
        fs.Close();
        objDataRow[strImageField] = Image;
    }
    catch (Exception ex)
    {
        Response.Write("<font color=red>" + ex.Message + "</font>");
    }
}

We need to fill the TypedDataSet, and before assigning this DataSet to the “SetDataSource” of our report, we need to add a few lines of code:

TypedDataSet ds = new TypedDataSet();

SqlConnection cn = new SqlConnection("Data Source=ServerName;" + 
                   "Initial Catalog=DataBaseName;User ID=UserName;" + 
                   "Password=UserPassWord");
SqlCommand Cmd = new SqlCommand();
SqlDataAdapter myAdapter = new SqlDataAdapter();

Cmd.CommandText = " Select * From TableName";
Cmd.Connection = cn;

myAdapter.SelectCommand = Cmd;

try
{
    cn.Open();
    myAdapter.Fill(ds.Tables[0]);
    cn.Close();
}
catch (Exception ex)
{
    throw;
}


for (int index = 0; index < ds.Tables[0].Rows.Count; index++)
{
    if (ds.Tables[0].Rows[index]["image_path"].ToString() != "")
    {
        string s = this.Server.MapPath(
                    ds.Tables[0].Rows[index]["image_path"].ToString());

        if (File.Exists(s))
        {
            LoadImage(ds.Tables[0].Rows[index], "image_stream", s);
        }
        else
        {
            LoadImage(ds.Tables[0].Rows[index], "image_stream", 
                      "DefaultPicturePath");
        }
    }
    else
    {
        LoadImage(ds.Tables[0].Rows[index], "image_stream", 
                  "DefaultPicturePath");
    }
}

try
{
    // Finally display report in crystal report viewer
    ReportDocument crDoc = new ReportDocument();
    crDoc.Load(Server.MapPath("CrystalReport.rpt"));
    crDoc.SetDataSource(ds.Tables[0]);
    CrystalReportViewer1.ReportSource = crDoc;
}
catch (Exception ex)
{
    throw;
}

Thanks

I would like to thank the CodeProject team (moderators, users, visitors...) for all their effort. Thank you everybody.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

About the Author

Redouane Mounafia



Occupation: Team Leader
Location: Morocco Morocco

Article Top
Sign Up to vote for this article
You must Sign In to use this message board.
FAQ FAQ Noise ToleranceSearch Search Messages 
 Layout  Per page   
 Msgs 1 to 1 of 1 (Total in Forum: 1) (Refresh)FirstPrevNext
GeneralThanks! A note...memberDigambar Kandangire4:25 27 Nov '08  

General General    News News    Question Question    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

PermaLink | Privacy | Terms of Use
Last Updated: 19 Nov 2008
Editor: Smitha Vijayan
Copyright 2008 by Redouane Mounafia
Everything else Copyright © CodeProject, 1999-2009
Web15 | Advertise on the Code Project