Code for coverting Data table Execl Reportusing System; using System.Collections; using System.Collections.Generic; using System.Data; using System.Globalization; using System.Reflection; namespace Common { /// <summary> /// Download Excel /// </summary> public class DownloadExcel : System.Web.UI.Page { #region Methods (4) // Public Methods (3) /// <summary> /// Generics the list to data table. /// </summary> /// <param name="list">The list.</param> /// <returns></returns> public static DataTable GenericListToDataTable(object list) { DataTable dt = null; Type listType = list.GetType(); if (listType.IsGenericType) { //determine the underlying type the List<> contains Type elementType = listType.GetGenericArguments()[0]; //create empty table -- give it a name in case //it needs to be serialized dt = new DataTable(elementType.Name + "List"); //define the table -- add a column for each public //property or field MemberInfo[] miArray = elementType.GetMembers( BindingFlags.Public | BindingFlags.Instance); foreach (MemberInfo mi in miArray) { if (mi.MemberType == MemberTypes.Property) { PropertyInfo pi = mi as PropertyInfo; dt.Columns.Add(pi.Name); } else if (mi.MemberType == MemberTypes.Field) { FieldInfo fi = mi as FieldInfo; dt.Columns.Add(fi.Name, fi.FieldType); } } //populate the table IList il = list as IList; foreach (object record in il) { int i = 0; object[] fieldValues = new object[dt.Columns.Count]; foreach (DataColumn c in dt.Columns) { MemberInfo mi = elementType.GetMember(c.ColumnName)[0]; if (mi.MemberType == MemberTypes.Property) { PropertyInfo pi = mi as PropertyInfo; fieldValues[i] = pi.GetValue(record, null); } else if (mi.MemberType == MemberTypes.Field) { FieldInfo fi = mi as FieldInfo; fieldValues[i] = fi.GetValue(record); } i++; } dt.Rows.Add(fieldValues); } } return dt; } /// <summary> /// Gets the date from string. /// </summary> /// <param name="strDate">The STR date.</param> /// <returns></returns> public static DateTime GetDateFromString(string strDate) { DateTime dt; try { Int32 intOADate = Int32.Parse(strDate); dt = DateTime.FromOADate(intOADate); } catch { try //try with dd/MM/yyyy { IFormatProvider culture = new CultureInfo("fr-FR", true); dt = DateTime.Parse(strDate, culture); } catch //try with MM/dd/yyyy { IFormatProvider culture = new CultureInfo("en-US", false); dt = DateTime.Parse(strDate, culture); } } return dt; } /// <summary> /// Function to export grid data to excel /// </summary> /// <typeparam name="T"></typeparam> /// <param name="entityList">The entity list.</param> /// <param name="hashTable">The hash table.</param> public void GetExcel<T>(List<T> entityList, Dictionary<int, string> hashTable) where T : class { ExportExcel(entityList, hashTable); } // Protected Methods (1) /// <summary> /// Exports the excel. /// </summary> /// <param name="entityList">The entity list.</param> /// <param name="hashTable">The hash table.</param> protected void ExportExcel(object entityList, Dictionary<int, string> hashTable) { DataTable dt = GenericListToDataTable(entityList); Response.Clear(); Response.ClearContent(); Response.ClearHeaders(); Response.ContentType = "application/vnd.ms-excel"; Response.AddHeader("Content-Disposition", "attachment; filename=Reports.xls"); //Response.Clear(); //Response.ContentType = "application/vnd.ms-excel"; string sep = ""; ICollection keyCollection = hashTable.Keys; int[] keys = new int[keyCollection.Count]; keyCollection.CopyTo(keys, 0); for (int i = 0; i < dt.Columns.Count; i++) { Response.Write(sep + dt.Columns[i].ColumnName); sep = "\t"; //excelTableColumn = excelTableColumn + "[" + hashTable[keys[i]] + "] text ,"; } //foreach (DataColumn dc in dt.Columns) //{ // Response.Write(sep + dc.ColumnName); // sep = "\t"; //} Response.Write("\n"); // int i; foreach (DataRow dr in dt.Rows) { sep = ""; for (int i = 0; i < dt.Columns.Count; i++) { Response.Write(sep + dr[i].ToString()); sep = "\t"; } Response.Write("\n"); } Response.End(); } #endregion Methods } }The Above code you can be placed in common folder or App_code(freamwork 2.0) when you are creating report page inherit this class to Report page like following code/// <summary> /// /// </summary> public partial class DelayedVechiclesBodyTypeReport : DownloadExcel { #region Private variables //your code #endregion }in Generate Report button Click write the following code :#region Web Generated Events /// <summary> /// /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected void btnGenerateReport_Click(object sender, EventArgs e) { List<ReportDelayedVehicleEntity> delayedVehicleDetailsList; delayedVehicleDetailsList = reportService.GetDelayVechiclesBodyTypeReport(Convert.ToInt32( rdoBodyType.SelectedValue)); Dictionary<int, string> excelHashTable = new Dictionary<int, string>(); excelHashTable.Add(0, "BodyNo"); excelHashTable.Add(1, "ModelCode"); excelHashTable.Add(2, "SuffixCode"); excelHashTable.Add(3, "ColorCode"); excelHashTable.Add(4, "JigInDate"); excelHashTable.Add(5, "FrameNo"); excelHashTable.Add(6, "ASSPlanned_LO"); excelHashTable.Add(7, "EngineNo"); excelHashTable.Add(8, "CurrentStageID"); excelHashTable.Add(9, "CarFamily"); excelHashTable.Add(10, "LotCode"); excelHashTable.Add(11, "SpecSheetNumber"); excelHashTable.Add(12, "EngineModelcode"); excelHashTable.Add(13, "StageName"); excelHashTable.Add(14, "StandardDefectName"); excelHashTable.Add(15, "Remark"); excelHashTable.Add(16, "DelayedDays"); excelHashTable.Add(17, "RootResponsibilityName"); excelHashTable.Add(18, "RepairResponsibilityName"); excelHashTable.Add(19, "TargetDate"); GetExcel(delayedVehicleDetailsList, excelHashTable); } #endregion
Advertisement