ASP.NET 使用ashx文件动态生成表格

  引自百度百科:

  .ashx文件是用于写web handler的。.ashx文件与.aspx文件类似,它免去了普通的.aspx页面的控件解析以及页面处理的过程。其实就是带HTML和C#的混合文件。.ashx文件适合产生供浏览器处理、不需要回发处理的数据格式,例如用于生成动态图片、动态文本等内容。

  下面分享一下使用ashx文件动态生成表格的例子。

  首先在需要动态生成表格的aspx文件(这里称之为“A.aspx”)里放入一个Div,用作生成表格的载体。例如:

            <div id="divTable">
            </div> 

  在A.aspx页面中加入js代码:

<script type="text/javascript">
    /*********************/
    /*****创建xmlHttp*****/
    /*********************/
    function CreateXmlHttp() {
        var xmlHttp;
        // Internet Explorer
        try {
            xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
        }
        catch (e) {
            try {
                xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
            }
            catch (e) {
                alert("您的浏览器不支持AJAX!");
                return false;
            }
        }

        return xmlHttp;
    }

    window.onload = function () {
        //创建xmlhttp
        var ajaxValue = "";
        var xmlHttp = CreateXmlHttp();
        var divHtml = document.getElementById("divTable");
        if (xmlHttp) {
            xmlHttp.onreadystatechange = function () {
                if (xmlHttp.readyState == 4) {
                    divHtml.innerHTML = xmlHttp.responseText;
                }
                else {
                    divHtml.innerHTML = "正在加载,请稍后...";
                }
            }
       var companyID = document.getElementById("hidCompanyID").value;
            var jobTypeCode2 = document.getElementById("hidJobTypeCode2").value;
            var url = "/HRManager/RenCaiKu/DetailDataTable.ashx" + "?CompanyID=" + companyID + "&JobTypeCode2=" + jobTypeCode2;
            xmlHttp.open("GET", url, true);
            xmlHttp.send();
}
if (ajaxValue.length > 0) { alert("show message"); return false; } } </script>

可以将参数传入处理文件DetailDataTable.ashx中。DetailDataTable.ashx文件实现如下:

 

View Code
  1 using System;
  2 using System.Collections.Generic;
  3 using System.Linq;
  4 using System.Web;
  5 using System.Text;
  6 using System.Web.SessionState;
  7 using System.Data;
  8 
  9 namespace HRZP2.HRManager.RenCaiKu
 10 {
 11     /// <summary>
 12     /// DetailDataTable 的摘要说明
 13     /// </summary>
 14     public class DetailDataTable : IHttpHandler, IRequiresSessionState
 15     {
 16         private string _companyID = string.Empty;
 17         public string CompanyID
 18         {
 19             get { return _companyID; }
 20             set { _companyID = value; }
 21         }
 22 
 23         private string _jobTypeCode2 = string.Empty;
 24         public string JobTypeCode2
 25         {
 26             get { return _jobTypeCode2; }
 27             set { _jobTypeCode2 = value; }
 28         }
 29 
 30         public void ProcessRequest(HttpContext context)
 31         {
 32             //清空缓存
 33             context.Response.Cache.SetCacheability(HttpCacheability.NoCache);
 34             context.Response.ContentType = "text/plain";
 35 
 36             CompanyID = context.Request.QueryString["CompanyID"].ToString();
 37             JobTypeCode2 = context.Request.QueryString["JobTypeCode2"].ToString();
 38 
 39             string strResult = string.Empty;
 40             strResult = CreateDetailTable(Convert.ToInt32(CompanyID), Convert.ToInt32(JobTypeCode2));
 41             context.Response.Write(strResult);
 42         }
 43 
 44 
 45         private string CreateDetailTable(int companyID, int jobTypeCode2)
 46         {
 47             HRS.BLL.Position.AP_SUBGRP bllAPS = new HRS.BLL.Position.AP_SUBGRP();
 48             HRS.BLL.Resume.ResumeStoreStatistic bllRSS = new HRS.BLL.Resume.ResumeStoreStatistic();
 49             DataTable positionTable = bllAPS.GetSecondRootbyParentId(jobTypeCode2);
 50             List<DataTable> dataList = new List<DataTable>();
 51             StringBuilder sbTable = new StringBuilder();
 52             //创建表格
 53             if (positionTable.Rows.Count > 0)
 54             {
 55                 sbTable.Append(string.Format("<table class='{0}' style='width:100%;' cellPadding='0' cellSpacing='0'>", GetTableCss()));
 56                 //创建第一行表头
 57                 sbTable.Append("<tr>");
 58                 foreach (DataRow row in positionTable.Rows)
 59                 {
 60                     sbTable.Append(string.Format("<td class='{0}' style='text-align:center'>{1}</td>", GetHeaderCss(), row["JobTypeName3"]));
 61                     int jobTypeCode3 = Convert.ToInt32(row["JobTypeCode3"].ToString());
 62                     DataTable data = bllRSS.StatisticDetail(companyID, jobTypeCode2, jobTypeCode3);
 63                     dataList.Add(data);
 64                 }
 65                 sbTable.Append("</tr>");
 66                 //得到DataTable链表中单个Table最大的行数
 67                 int maxRowsCount = GetMaxRowsCount(dataList);
 68                 int columnCount = dataList.Count;
 69                 string strRowCss = string.Empty;
 70                 string strCellCss = string.Empty;
 71                 for (int i = 0; i < maxRowsCount; i++)
 72                 {
 73                     //设置样式
 74                     if (i % 2 == 0)
 75                     {
 76                         strRowCss = GetRowCss();
 77                         strCellCss = GetCellCss();
 78                     }
 79                     else
 80                     {
 81                         strRowCss = GetAltRowCss();
 82                         strCellCss = GetAltCellCss();
 83                     }
 84 
 85                     sbTable.Append("<tr class='" + strRowCss + "'>");
 86                     for (int j = 0; j < columnCount; j++)
 87                     {
 88                         //当前行数没有超过该DataTable的最大行数
 89                         if (i < dataList[j].Rows.Count)
 90                         {
 91                             if (dataList[j].Rows[i]["ResumeCount"].ToString() != "0")
 92                             {
 93                                 string urlStr = "ResumeSearchList.aspx?Type=Company&CompanyID=" + companyID + "&JOB_ID=" + dataList[j].Rows[i]["JOB_ID"].ToString();
 94                                 sbTable.Append(string.Format(
 95                                     "<td class='{0}'>{1}<div style='float: right; width: 10%; font-weight: bold'><a href='{2}'>{3}</a></div></td>",
 96                                     strCellCss, dataList[j].Rows[i]["NAME"], urlStr ,dataList[j].Rows[i]["ResumeCount"]));
 97                             }
 98                             else
 99                             {
100                                 sbTable.Append(string.Format(
101                                     "<td class='{0}'>{1}</td>",strCellCss, dataList[j].Rows[i]["NAME"]));
102                             }
103                         }
104                         else
105                         {
106                             sbTable.Append(string.Format("<td class='{0}'></td>", strCellCss));
107                         }
108                     }
109                     sbTable.Append("</tr>");
110                 }
111                 sbTable.Append("</table>");
112             }
113             else
114             {
115                 sbTable.Append("<table><tr><td>无记录</td></tr></table>");
116             }
117             return sbTable.ToString();
118         }
119 
120 
121         /// <summary>
122         /// 得到DataTable链表中单个Table最大的行数
123         /// </summary>
124         /// <param name="dataList"></param>
125         /// <returns></returns>
126         private int GetMaxRowsCount(List<DataTable> dataList)
127         {
128             int maxRowsCount = 0;
129             if (dataList.Count > 0)
130             {
131                 maxRowsCount = dataList[0].Rows.Count;
132 
133                 foreach (DataTable data in dataList)
134                 {
135                     if (data.Rows.Count > maxRowsCount)
136                     {
137                         maxRowsCount = data.Rows.Count;
138                     }
139                 }
140             }
141             return maxRowsCount;
142         }
143 
144         #region 获取样式
145         /// <summary>
146         /// 表格样式
147         /// </summary>
148         /// <returns></returns>
149         private string GetTableCss()
150         {
151             return "RadGrid_TableDefault";
152         }
153 
154         /// <summary>
155         /// 行样式
156         /// </summary>
157         /// <returns></returns>
158         private string GetRowCss()
159         {
160             return "RadGrid_Row";
161         }
162 
163         /// <summary>
164         /// 行样式
165         /// </summary>
166         /// <returns></returns>
167         private string GetAltRowCss()
168         {
169             return "RadGrid_AltRow";
170         }
171 
172         /// <summary>
173         /// 表头单元格样式
174         /// </summary>
175         /// <returns></returns>
176         private string GetHeaderCss()
177         {
178             return "RadGrid_Header";
179         }
180 
181         /// <summary>
182         /// 单元格样式
183         /// </summary>
184         /// <returns></returns>
185         private string GetCellCss()
186         {
187             return "RadGrid_Cell";
188         }
189 
190         /// <summary>
191         /// 单元格样式
192         /// </summary>
193         /// <returns></returns>
194         private string GetAltCellCss()
195         {
196             return "RadGrid_AltCell";
197         }
198         #endregion
199 
200         public bool IsReusable
201         {
202             get
203             {
204                 return false;
205             }
206         }
207     }
208 }

使用ashx处理网页的动态生成文本、表格可读性高、便于维护。

 

 

posted @ 2012-11-06 11:36  孤独狂热  阅读(636)  评论(0编辑  收藏  举报