列表导出为Excel(市拆项目房源信息统计模块)

#region RoomReportObjectDataSource
        /// <summary>
        /// 返回数据的结构体
        /// </summary>
        public struct ROOMREPORT
        {
            public string BLOCK_NAME { get; set; }//楼名
            public string ROOM_NO { get; set; }//房间号
            public string SETTLE { get; set; }//是否安置
            public int? CHECK_NO { get; set; }//选房顺序号
            public string DOCUMENT_NUM { get; set; }//档案号
            public string OWNER_NAME { get; set; }//产权人
            public string CONFIRMER_NAME { get; set; }//确权人
            public string RESIDENT_NAME { get; set; }//使用人
        }
        public int count;
        [DataObjectMethod(DataObjectMethodType.Select, true)]
        public IEnumerable Get_Data(int startIndex, int pageSize, long gr_id, long type_id, long block_id, string settle, string sortDirection, string sortColumn)
        {
            DataClassesDataContext db = DataClassesDataContext.Default;           
            List<T_ROOM> rooms = db.T_ROOM.Where(r => r.T_BLOCK.T_GROUND_RATIO.GR_ID == gr_id && r.T_BLOCK.U_ID == type_id && r.ROOM_NO!=null).ToList();
            if (block_id != 0)
            {
                rooms = rooms.Where(r => r.BLOCK_ID == block_id).ToList();
            }
            if (settle != "0")
            {
                if (settle == "1")
                {
                    rooms = rooms.Where(r => r.FAMILY_ID != null).ToList();
                }
                else
                {
                    rooms = rooms.Where(r => r.FAMILY_ID == null).ToList();
                }
            }
            List<ROOMREPORT> roomreports = new List<ROOMREPORT>();
            foreach (var item in rooms)
            {
                ROOMREPORT roomreport = new ROOMREPORT();
                roomreport.BLOCK_NAME = item.T_BLOCK.BLOCK_NAME;
                roomreport.ROOM_NO = item.ROOM_NO;
                roomreport.SETTLE = item.FAMILY_ID == null ? "未安置" : "已安置";
                if (item.FAMILY_ID != null)
                {
                    roomreport.CHECK_NO = item.T_MOVE_FAMILY.CHECK_NO;
                    roomreport.DOCUMENT_NUM = item.T_MOVE_FAMILY.DOCUMENT_NUM;
                    roomreport.OWNER_NAME = item.T_MOVE_FAMILY.OWNER_NAME;
                    roomreport.RESIDENT_NAME = item.T_MOVE_FAMILY.RESIDENT_NAME;
                    roomreport.CONFIRMER_NAME = item.T_MOVE_FAMILY.CONFIRMER_NAME;
                }
                roomreports.Add(roomreport);
            }
            count = roomreports.Count;
            
            if (sortDirection == "ASC")
            {
                roomreports = roomreports.OrderBy(r => GetPropertyValue(r,sortColumn)).ToList();
            }
            else
            {
                roomreports = roomreports.OrderByDescending(r =>GetPropertyValue(r,sortColumn)).ToList();
            }
            datastring = RoomReportString(roomreports);
            return roomreports.Skip(startIndex).Take(pageSize).ToArray();
        }

        public int Get_Count(long gr_id, long type_id, long block_id, string settle,string sortDirection, string sortColumn)
        {
            return count;
        }

        /// <summary>
        /// 返回table,用于导出excel
        /// </summary>
        public static string datastring
        {
            get;
            set;
        }

        /// <summary>
        /// 返回table,用于导出excel
        /// </summary>
        /// <param name="rms"></param>
        /// <returns></returns>
        public string RoomReportString(List<ROOMREPORT> rms)
        {
            StringBuilder sb = new StringBuilder();

            sb.Append("<table cellspacing="0" rules="all" border="1" style="border-collapse:collapse;">");

            sb.Append("<tr>");

            sb.AppendFormat("<td>{0}</td>", "楼号");
            sb.AppendFormat("<td>{0}</td>", "房间号");
            sb.AppendFormat("<td>{0}</td>", "是否安置");
            sb.AppendFormat("<td>{0}</td>", "选房顺序号");
            sb.AppendFormat("<td>{0}</td>", "档案号");
            sb.AppendFormat("<td>{0}</td>", "产权人");
            sb.AppendFormat("<td>{0}</td>", "确权人");
            sb.AppendFormat("<td>{0}</td>", "使用人");
            sb.Append("</tr>");
            foreach (var item in rms)
            {
                sb.Append("<tr>");
               
                sb.AppendFormat("<td>{0}</td>", item.BLOCK_NAME);
                sb.AppendFormat("<td>{0}</td>", item.ROOM_NO);
                sb.AppendFormat("<td>{0}</td>", item.SETTLE);
                sb.AppendFormat("<td>{0}</td>", item.CHECK_NO);
                sb.AppendFormat("<td>{0}</td>", item.DOCUMENT_NUM);
                sb.AppendFormat("<td>{0}</td>", item.OWNER_NAME);
                sb.AppendFormat("<td>{0}</td>", item.CONFIRMER_NAME);
                sb.AppendFormat("<td>{0}</td>", item.RESIDENT_NAME);
                sb.Append("</tr>");
            }
            sb.Append("</table>");

            return sb.ToString();
        }
        /// <summary>
        /// 反射,动态进行orderby操作   翁皓文  2013年4月26
        /// </summary>
        /// <param name="obj"></param>
        /// <param name="property"></param>
        /// <returns></returns>
        private static object GetPropertyValue(object obj, string property)
        {
            System.Reflection.PropertyInfo propertyInfo = obj.GetType().GetProperty(property);
            return propertyInfo.GetValue(obj, null);
        } 
        #endregion

前台导出按钮事件:

 protected void Button1_Click(object sender, EventArgs e)
        {
            Response.ClearContent();
            Response.AddHeader("content-disposition", "attachment; filename=MyExcelFile.xls");
            Response.ContentType = "application/excel";
            Response.Write(RoomListManager.datastring);
            Response.End();
        }
原文地址:https://www.cnblogs.com/wenghaowen/p/3246296.html