zoukankan      html  css  js  c++  java
  • Web报表-RDLC报表的使用

    RDLC报表使用方便,能很好镶嵌在web程序里面,且能方便的导出各种文件的格式;使用此报表程序要引用 Microsoft.Reporting.WebForms;下面以一个例子来进行讲解它的用法。

    1.后台代码:

     #region 报表
    
            public ActionResult ReportView()
            {
                return View(ReportModel.ReportModelList);
            }
    
    
            public ActionResult DownLoad(string fileType)
            {
                DataTable dt = new DataTable();
                dt.Columns.Add(new DataColumn("ID", typeof(int)));
                dt.Columns.Add(new DataColumn("UserName", typeof(string)));
                dt.Columns.Add(new DataColumn("Address", typeof(string)));
                dt.Columns.Add(new DataColumn("Sex", typeof(string)));
                dt.Columns.Add(new DataColumn("Age", typeof(int)));
                dt.Columns.Add(new DataColumn("Phone", typeof(string)));
                dt.Columns.Add(new DataColumn("IMEID", typeof(string)));
                dt.Columns.Add(new DataColumn("CreateDate", typeof(string)));
                dt.Columns.Add(new DataColumn("HeadImg", typeof(string)));
    
    
                List<ReportModel> reportDatas = ReportModel.ReportModelList;
    
                foreach (var item in reportDatas)
                {
                    dt.Rows.Add(item.ID, item.UserName, item.Address, item.Sex ? "" : "", item.Age,
                        item.Phone, item.IMEID, item.CreateDate.ToShortDateString(), getImgStr(item.HeadImg));
                }
                 
                LocalReport localReport = new LocalReport();
                localReport.ReportPath = Server.MapPath("~/Report/Report1.rdlc");
    
                ReportDataSource reportDataSource0 = new ReportDataSource("UserList", dt);
                localReport.DataSources.Add(reportDataSource0);
                  
                string reportType = "PDF";
                string mimeType;
                string encoding = "UTF-8";
                string fileNameExtension;
    
                string deviceInfo = "<DeviceInfo>" + "  <OutputFormat>" + reportType + "</OutputFormat>" + "<PageWidth>21cm</PageWidth>" + "  <PageHeight>29.7cm</PageHeight>" + "  <MarginTop>0.5in</MarginTop>" + "  <MarginLeft>1in</MarginLeft>" + "  <MarginRight>1in</MarginRight>" + "  <MarginBottom>0.5in</MarginBottom>" + "</DeviceInfo>";
                Warning[] warnings;
                string[] streams;
                byte[] renderedBytes;
                string ReportType = string.IsNullOrEmpty(fileType) ? "WORD" : fileType;
                mimeType = "Application/octet-stream";
                renderedBytes = localReport.Render(ReportType, deviceInfo, out mimeType, out encoding, out fileNameExtension, out streams, out warnings);
                string Extension = getFileExtension(ReportType);
                string filename = "OutReport" + Extension;
    
                return File(renderedBytes, mimeType, filename);
            }
    
            /// <summary>
            /// 获取报表文件类型
            /// </summary>
            /// <param name="FileName">文件名称,WORD,EXCEL,PDF等</param>
            /// <returns>.doc,.xls,.pdf</returns>
            private string getFileExtension(string FileName)
            {
                string Extension = null;
    
                if (FileName.Equals("WORD"))
                    Extension = ".doc";
                else if (FileName.Equals("PDF"))
                    Extension = ".pdf";
                else if (FileName.Equals("EXCEL"))
                    Extension = ".xls";
    
                return Extension;
            }
    
    
            public string getImgStr(string imgUrl)
            {
                string imgPath = Server.MapPath(imgUrl);
                Image img = Image.FromFile(imgPath);
    
                byte[] imgBytes;
                MemoryStream ms = null;
                try
                {
                    ms = new MemoryStream();
                    img.Save(ms, ImageFormat.Jpeg);
                    imgBytes = new Byte[ms.Length];
                    imgBytes = ms.ToArray();
                }
                catch (ArgumentNullException ex)
                {
                    throw ex;
                }
                finally
                {
                    ms.Close();
                }
    
                string imgString = Convert.ToBase64String(imgBytes);
                return imgString;
            }
    
    
    
            #endregion

    2.ReportModel 实体的代码如下:

      public class ReportModel
        {
            public int ID { get; set; }
            public string UserName { get; set; }
            public string Address { get; set; }
            public bool Sex { get; set; }
            public int Age { get; set; }
            public string Phone { get; set; }
            public string IMEID { get; set; } 
            public string HeadImg { get; set; }
            public DateTime CreateDate { get; set; }
    
    
    
            public static List<ReportModel> ReportModelList
            {
                get { return ReportModel.getReportModel(); }
            }
    
            public static List<ReportModel> getReportModel()
            {
                List<ReportModel> rmList = new List<ReportModel>();
                for (int i = 0; i < 10; i++)
                {
                    rmList.Add(new ReportModel
                    {
                        ID = i + 1,
                        IMEID = "41272719910127456" + i.ToString(),
                        Phone = "1356532458" + i.ToString(),
                        Sex = i % 2 == 1 ? true : false,
                        UserName = "用户" + i.ToString(),
                        CreateDate = DateTime.Now.AddDays(0 - i),
                        Address = "河南省*******",
                        Age = 20 + i,
                         HeadImg="~/Content/Img/headImg.jpg"
                    });
                }
                return rmList;
            }
        }

     3.前台的代码也很简单,如下:

    @{
        ViewBag.Title = "Report";
    }
    @model IEnumerable<MvcApplication1.Models.ReportModel>
    <style type="text/css">
        #UserTable td {
            border-left: 1px solid blue;
            border-bottom: 1px solid blue;
        }
    
        #UserTable th {
            border-left: 1px solid blue;
            border-bottom: 1px solid blue;
            border-top: 1px solid blue;
        }
    
            #UserTable th:last-child {
                border-right: 1px solid blue;
            }
    
        #UserTable td:last-child {
            border-right: 1px solid blue;
        }
    </style>
    <script type="text/javascript">
        function downLoad(obj) {
            var fileType = $(obj).attr("filetype");
            $("#fileTypeInput").val(fileType);
            $("#downloadForm").submit();
        }
    </script>
    <form action="/Report/DownLoad" id="downloadForm">
        <input type="hidden" name="fileType" id="fileTypeInput" />
    </form>
    <table>
        <tr>
            <td filetype="WORD" onclick="downLoad(this)" style="background-image: url('../Content/Img/word.png');  128px; height: 128px; background-repeat: no-repeat; border: 1px solid blue; cursor: pointer;"></td>
            <td filetype="EXCEL" onclick="downLoad(this)" style="background-image: url('../Content/Img/excel.png');  128px; height: 128px; background-repeat: no-repeat; border: 1px solid blue; cursor: pointer;"></td>
            <td filetype="PDF" onclick="downLoad(this)" style="background-image: url('../Content/Img/pdf.png');  128px; height: 128px; background-repeat: no-repeat; border: 1px solid blue; cursor: pointer;"></td>
        </tr>
    </table>
    <table border="0" cellspacing="0" cellpadding="0" style=" 100%;" id="UserTable">
        <tr>
            <th>头像</th>
            <th>编号</th>
            <th>用户名称</th>
            <th>年龄</th>
            <th>性别</th>
            <th>地址</th>
            <th>电话</th>
            <th>身份证号</th>
            <th>注册日期</th>
        </tr>
        @foreach (var item in Model)
        { 
            <tr>
                <td>
                    <img width="50"  src="@Url.Content(item.HeadImg)"/></td>
                <td>@item.ID</td>
                <td>@item.UserName</td>
                <td>@item.Age</td>
                <td>@(item.Sex ? "" : "")</td>
                <td>@item.Address</td>
                <td>@item.Phone</td>
                <td>@item.IMEID</td>
                <td>@item.CreateDate.ToShortDateString()</td>
            </tr>
        }
    </table>

     4.实体的数据要传入到一个xsd格式的数据集里面,然后rdlc文件再来访问数据集的数据,数据集如下:

    5.rdlc报表文件构建如下:

    6.

    6.有图片的数据,头像的显示方格里面添加一个图片控件,图片控件的value属性值设置如下:

    7.页面效果已经导出的Word文件图如下:

  • 相关阅读:
    JQuery判断checkbox是否选中-批量
    浮动跟随
    当天时间戳范围
    统计兼职人员打标签数量
    submit回车提交影响
    js 数组去除空值
    js循环
    ajax
    滚动条位置
    oc基础-set和get方法的使用
  • 原文地址:https://www.cnblogs.com/wangchengshen/p/3951350.html
Copyright © 2011-2022 走看看