RDLC动态添加图像以进行报告

时间:2014-07-17 14:48:07

标签: c# asp.net rdlc

我有远程服务器中的图像列表,我需要在现有报告中显示其中的一些图像。我尝试将图像控件放到rdlc上,它适用于单个图像。

但是我需要显示多个图像,没有固定的数量。

我在下面的帖子中提到过,但没有一个是明确的:

C# - Add List of images to report viewer

Insert unknown number of Images to the report at runtime using reportviewer

http://www.c-sharpcorner.com/blogs/6194/display-image-in-rdlc-report-microsoft-report-viewer.aspx%27

我知道此请求可能存在重复,如果有,请引导我。

2 个答案:

答案 0 :(得分:2)

我首先在现有报告中添加一个表格,如上面提到的那样,删除了不必要的列,然后在rdlc设计中的左侧单元格中添加了一个图像。在图像属性中将源设置为“外部”

set the source to "External"

现在在xml视图中打开rdlc,找到数据集标记,为带有图像的新表添加新数据集

<DataSet Name="DataSet1">
  <Fields>
    <Field Name="filepath">
      <DataField>track_file_id_pk</DataField>
      <rd:TypeName>System.string</rd:TypeName>
    </Field>
    </Field>
  </Fields>
  <Query>
    <DataSourceName>xxxt</DataSourceName>
    <CommandText>/* Local Query */</CommandText>
  </Query>
  <rd:DataSetInfo>
    <rd:DataSetName>xxx</rd:DataSetName>
    ...
  </rd:DataSetInfo>
</DataSet>

现在将图像列表数据集添加到新表中,如下所示

<Tablix Name="Tablix2">
    ....
    </TablixRowHierarchy>
    <DataSetName>ImgDataSet</DataSetName>

返回rdlc的设计视图,转到图像属性,设置“使用此图像”字段

set the "use this image" field

在创建具有一列“filepath”的数据表后面的代码中,添加带有图像文件路径的行 然后在现有数据源下面添加数据源以报告。

DataTable dtable = new DataTable();
DataColumn dcol = new DataColumn("filepath");
dtable.Columns.Add(dcol);

DataRow drow = dtable.NewRow();
string pat = new Uri(Server.MapPath("~/Content/DSC_019.jpg")).AbsoluteUri;
drow["track_file_uuidName"] = pat;
dtable.Rows.Add(drow);
...

ReportViewer1.LocalReport.EnableExternalImages = true;

...
ReportViewer1.LocalReport.DataSources.Clear();
ReportViewer1.LocalReport.DataSources.Add(new ReportDataSource("rptDataSet", objCommonreport.ReportTable));
ReportViewer1.LocalReport.DataSources.Add(new ReportDataSource("DataSet1", dtable));

答案 1 :(得分:0)

我做了以下操作,以显示矩阵中包含未知项目数的图像列表。

首先创建一个只有一个字段的数据集,你可以随心所欲,我把它命名为#34; filepath&#34;和数据集的名称是&#34; DataSet5&#34;。您可以更改名称并相应地使用它。

然后你需要添加一个表,删除不必要的行和列,这样你只剩下1列和行(1x1)矩阵。在该列中插入图像,立即设置其属性。图像源应该是EXTERNAL。

在报告的aspx.cs文件中,从数据库中获取图像的路径,现在获取这些图像的绝对路径并附加&#34; file:///&#34;因为报告需要显示文件。我确实喜欢这个:

string rel_Path = HttpContext.Current.Server.MapPath("~");
if (_articleOrders.Any())
        {
            foreach (ArticleOrder order in _articleOrders)
            {
                if (!string.IsNullOrEmpty(order.ArticleImage))
                {
                    if (File.Exists(rel_Path + "\\" + order.ArticleImage))
                    {
                        var AIpath = "file:///" + rel_Path + "\\" + order.ArticleImage;
                        articleImagesList.Add(AIpath);
                    }
                }
            }
            CreateDatasetForImages(articleImagesList);
        }

然后我将数据添加到数据集中,如下所示:

private void CreateDatasetForImages(List<string> articleImagesList)
    {
        DataTable table = new DataTable();
        table.Columns.Add("filepath", typeof(string));

        foreach (string articleImage in articleImagesList)
        {
            DataRow drow = table.NewRow();
            string pat = articleImage;
            drow["filepath"] = pat;
            table.Rows.Add(drow);
        }
        FlowerBookingReportViewer.LocalReport.DataSources.Add(new ReportDataSource("DataSet5", table));
    }

现在再次转到图像属性并设置&#34;使用此图像&#34;到[filepath],因为它是我们数据集中保存图像路径的列的名称。希望它适用于某人!