赋值啊,在报表里放一个image对象,然后命名,比如crtimg,再在程序里通过这个语句把图片转换成byte[]赋值到水晶报表image对象上:public ReportDocument rptDoc1;
byte[] img_byte=你的图片;CrystalDecisions.CrystalReports.Engine.PictureObject img= rptDoc1.ReportDefinition.ReportObjects["crtimg"] as CrystalDecisions.CrystalReports.Engine.PictureObject ;img = img_byte;
主要用到的是水昌报表的这个组件:CrystalDecisions.CrystalReports.Engine.PictureObject
,你也可以上网查查相关这个的用法。甚至vs支持的水晶报表里的所有对象都能在程序里用这种方式赋值。上面那个是图片,假如是文字的话就用这个:CrystalDecisions.CrystalReports.Engine.PictureObject不知能否帮到你。

解决方案 »

  1.   

    上面写错了,文字的话是用:CrystalDecisions.CrystalReports.Engine.TextObject
      

  2.   

    这里的byte[] img_byte=你的图片;是先要把图片转换成二进制然后去赋值给pictureobject 吗?
    有没有直接读取路径的办法?
      

  3.   

    这里的byte[] img_byte=你的图片;是先要把图片转换成二进制然后去赋值给pictureobject 吗?
    有没有直接读取路径的办法?一样的道理呀,把路径图片转换成byte[]就行了啊
      

  4.   

    byte[] img_byte = ReadFile(@"c:\你的图片.jpg");
      

  5.   

    SQL的话,你试试这个:
    我也为此头痛的很久,写了一大堆,不知道有没有走弯路,希望能帮上你,请大家指点一点哈~~
    在你的数据表里添加一个image类型的字段(我这取名iamge1),在你的项目添加一个.xsd的数据集,把要显示的数据字段放在.xsd里面(当然新加的image1也要),在报表.rpt里在“数据库专家”--》选择"数据库文件"-->把刚刚的加的.xsd作为数据源,把要显示字段放报表里,图片就是那个"image1"字段
    在显示页面方面其它我就不多说,主要说一下填充的问题,(写的不专业,希望没有误人子弟~~)
     public DataSet commonDS( string sql,string tablename)//注意这里的tablename就是.xsd里的TABLE,你打开.xsd就知道了
       
     {
            DataSet dataSet = new DataSet();
            SqlCommand cmd = new SqlCommand();
            SqlConnection conn = new SqlConnection(SqlHelper.ConnectionString);
            cmd.Connection = conn;
            cmd.CommandType = CommandType.Text;
            cmd.CommandText = sql;
            SqlDataAdapter adp = new SqlDataAdapter();
            adp.SelectCommand = cmd;
            conn.Open();
            adp.Fill(dataSet, tablename);
            conn.Close();
            return dataSet;
        }
    //以下就是根据数据库取出的路径,把图片转换成image类型放在DATASET里面
    using (DataSet DsImage = rd.commonDS( sqlpicture, "picture"))//commonDS( sqlpicture, "picture")这是上面的填充
            {
                DsImage.Tables[0].Columns.Add("image1", typeof(byte[]));
                string filename = "";
                for (int i = 0; i < DsImage.Tables[0].Rows.Count; i++)
                {
                    filename = DsImage.Tables[0].Rows[i]["imagepath"].ToString();
                    if (filename != "")
                        DsImage.Tables[0].Rows[i]["image1"] = GetFileStream(filename);//##
                }
                DataTable picture = DsImage.Tables[0];
                ds.Tables.Add(picture.Copy());
            };
    //这里是根据文件路径转换成二进制,对应上面的//##
       private byte[] GetFileStream(string FileName)
        {
            FileStream fstr = new FileStream(Server.MapPath(FileName), FileMode.Open);
            BinaryReader brd = new BinaryReader(fstr);
            byte[] b = new byte[fstr.Length];
            b = brd.ReadBytes((int)fstr.Length);
            fstr.Close();
            return b;
        }
    最后把DataSet绑定到报表显示页面
    其实我个人倒不是特别喜欢用水晶做,有的很简单的功能用水晶做太复杂了,反而没有finereport来得好用