读书笔记:《Aspx开发200问》——如果把数据库中的数据以Excel文件的格式显示在浏览器中
要把Excel文件格式显示在客户端,首先使用Response对象设置HTTP输出流的内容格式为Excel,并对HTTP流进行操作。
然后使用StringWriter类的对象初始化HtmlTextWriter对象,来初始化DataGrid控件呈现给客户端的HTML内容
公共属性
名称 | 说明 | |
---|---|---|
![]() |
Buffer | 获取或设置一个值,该值指示是否缓冲输出,并在完成处理整个响应之后将其发送。 |
![]() |
BufferOutput | 获取或设置一个值,该值指示是否缓冲输出,并在完成处理整个页之后将其发送。 |
![]() |
Cache | 获取网页的缓存策略(过期时间、保密性、变化子句)。 |
![]() |
CacheControl | 将 Cache-Control HTTP 头设置为 Public 或 Private。 |
![]() |
Charset | 获取或设置输出流的 HTTP 字符集。 |
![]() |
ContentEncoding | 获取或设置输出流的 HTTP 字符集。 |
![]() |
ContentType | 获取或设置输出流的 HTTP MIME 类型。 |
![]() |
Cookies | 获取响应 Cookie 集合。 |
![]() |
Expires | 获取或设置在浏览器上缓存的页过期之前的分钟数。如果用户在页面过期之前返回该页,则显示缓存版本。提供 Expires 是为了与以前版本的 ASP 兼容。 |
![]() |
ExpiresAbsolute | 获取或设置从缓存中移除缓存信息的绝对日期和时间。提供 ExpiresAbsolute 是为了与以前版本的 ASP 兼容。 |
![]() |
Filter | 获取或设置一个包装筛选器对象,该对象用于在传输之前修改 HTTP 实体主体。 |
![]() |
HeaderEncoding | 获取或设置一个 Encoding 对象,该对象表示当前标头输出流的编码。 |
![]() |
IsClientConnected | 获取一个值,通过该值指示客户端是否仍连接在服务器上。 |
![]() |
IsRequestBeingRedirected | 获取一个布尔值,该值指示客户端是否正在被传输到新的位置。 |
![]() |
Output | 启用到输出 HTTP 响应流的文本输出。 |
![]() |
OutputStream | 启用到输出 Http 内容主体的二进制输出。 |
![]() |
RedirectLocation | 获取或设置 Http“位置”标头的值。 |
![]() |
Status | 设置返回到客户端的 Status 栏。 |
![]() |
StatusCode | 获取或设置返回给客户端的输出的 HTTP 状态代码。 |
![]() |
StatusDescription | 获取或设置返回给客户端的输出的 HTTP 状态字符串。 |
![]() |
SuppressContent | 获取或设置一个值,该值指示是否将 HTTP 内容发送到客户端。 |
公共方法
(请参见 受保护的方法 )
名称 | 说明 | |
---|---|---|
![]() |
AddCacheDependency | 将一组缓存依赖项与响应关联,这样,如果响应存储在输出缓存中并且指定的依赖项发生变化,就可以使该响应失效。 |
![]() |
AddCacheItemDependencies | 已重载。 使缓存响应的有效性依赖于缓存中的其他项。 |
![]() |
AddCacheItemDependency | 使缓存响应的有效性依赖于缓存中的其他项。 |
![]() |
AddFileDependencies | 已重载。 使缓存响应的有效性依赖于缓存中的其他项。 |
![]() |
AddFileDependency | 将单个文件名添加到文件名集合中,当前响应依赖于该集合。 |
![]() |
AddHeader | 将一个 HTTP 头添加到输出流。提供 AddHeader 是为了与以前版本的 ASP 兼容。 |
![]() |
AppendCookie | 将一个 HTTP Cookie 添加到内部 Cookie 集合。 |
![]() |
AppendHeader | 将 HTTP 头添加到输出流。 |
![]() |
AppendToLog | 将自定义日志信息添加到 Internet 信息服务 (IIS) 日志文件。 |
![]() |
ApplyAppPathModifier | 如果会话使用 Cookieless 会话状态,则将该会话 ID 添加到虚拟路径中,并返回组合路径。如果不使用 Cookieless 会话状态,则 ApplyAppPathModifier 返回原始的虚拟路径。 |
![]() |
BinaryWrite | 将一个二进制字符串写入 HTTP 输出流。 |
![]() |
Clear | 清除缓冲区流中的所有内容输出。 |
![]() |
ClearContent | 清除缓冲区流中的所有内容输出。 |
![]() |
ClearHeaders | 清除缓冲区流中的所有头。 |
![]() |
Close | 关闭到客户端的套接字连接。 |
![]() |
End | 将当前所有缓冲的输出发送到客户端,停止该页的执行,并引发 EndRequest 事件。 |
![]() |
Equals | 已重载。 确定两个 Object 实例是否相等。 (从 Object 继承。) |
![]() |
Flush | 向客户端发送当前所有缓冲的输出。 |
![]() |
GetHashCode | 用作特定类型的哈希函数。GetHashCode 适合在哈希算法和数据结构(如哈希表)中使用。 (从 Object 继承。) |
![]() |
GetType | 获取当前实例的 Type。 (从 Object 继承。) |
![]() |
Pics | 将一个 PICS-Label HTTP 标头追加到输出流。 |
![]() |
Redirect | 已重载。 将客户端重定向到新的 URL。 |
![]() ![]() |
ReferenceEquals | 确定指定的 Object 实例是否是相同的实例。 (从 Object 继承。) |
![]() ![]() |
RemoveOutputCacheItem | 静态方法从缓存中移除所有与指定路径关联的缓存项。 |
![]() |
SetCookie | 更新 Cookie 集合中的一个现有 Cookie。 |
![]() |
ToString | 返回表示当前 Object 的 String。 (从 Object 继承。) |
![]() |
TransmitFile | 将指定的文件直接写入 HTTP 响应输出流,而不在内存中缓冲该文件。 |
![]() |
Write | 已重载。 将信息写入 HTTP 响应输出流。 |
![]() |
WriteFile | 已重载。 将指定的文件直接写入 HTTP 响应输出流。 |
![]() |
WriteSubstitution | 允许将响应替换块插入响应,从而允许为缓存的输出响应动态生成指定的响应区域。 |
HTML:
<form id="excel" method="post" runat="server">
<TABLE id="Table1" style="Z-INDEX: 102; LEFT: 16px; WIDTH: 288px; POSITION: absolute; TOP: 16px; HEIGHT: 178px"
cellSpacing="1" cellPadding="1" width="288" border="0">
<TR>
<TD>
<asp:datagrid id="dgExcel" runat="server" Font-Names="宋体" Font-Size="9pt" Height="100%" Width="100%"
BorderStyle="None" BorderWidth="1px" BorderColor="#CC9966" BackColor="White" CellPadding="4">
<SelectedItemStyle Font-Bold="True" ForeColor="#663399" BackColor="#FFCC66"></SelectedItemStyle>
<AlternatingItemStyle BackColor="#FFCC99"></AlternatingItemStyle>
<ItemStyle BorderWidth="2px" ForeColor="#330099" BorderStyle="Solid" BorderColor="Black" BackColor="White"></ItemStyle>
<HeaderStyle Font-Bold="True" HorizontalAlign="Center" BorderWidth="2px" ForeColor="#FFFFCC"
BorderStyle="Solid" BorderColor="Black" BackColor="#990000"></HeaderStyle>
</asp:datagrid></TD>
</TR>
<TR>
<TD>
<asp:Button id="btnGetExcel" runat="server" Text="把DataGrid中的内容以Excel显示"></asp:Button></TD>
</TR>
</TABLE>
</form>
<TABLE id="Table1" style="Z-INDEX: 102; LEFT: 16px; WIDTH: 288px; POSITION: absolute; TOP: 16px; HEIGHT: 178px"
cellSpacing="1" cellPadding="1" width="288" border="0">
<TR>
<TD>
<asp:datagrid id="dgExcel" runat="server" Font-Names="宋体" Font-Size="9pt" Height="100%" Width="100%"
BorderStyle="None" BorderWidth="1px" BorderColor="#CC9966" BackColor="White" CellPadding="4">
<SelectedItemStyle Font-Bold="True" ForeColor="#663399" BackColor="#FFCC66"></SelectedItemStyle>
<AlternatingItemStyle BackColor="#FFCC99"></AlternatingItemStyle>
<ItemStyle BorderWidth="2px" ForeColor="#330099" BorderStyle="Solid" BorderColor="Black" BackColor="White"></ItemStyle>
<HeaderStyle Font-Bold="True" HorizontalAlign="Center" BorderWidth="2px" ForeColor="#FFFFCC"
BorderStyle="Solid" BorderColor="Black" BackColor="#990000"></HeaderStyle>
</asp:datagrid></TD>
</TR>
<TR>
<TD>
<asp:Button id="btnGetExcel" runat="server" Text="把DataGrid中的内容以Excel显示"></asp:Button></TD>
</TR>
</TABLE>
</form>
服务端代码:
private void Page_Load(object sender, System.EventArgs e)
{
DataSet objDataset = new DataSet();
SqlConnection objConn = new SqlConnection();
objConn = new SqlConnection(ConfigurationSettings.AppSettings["ConnectionSqlServer"].ToString());
objConn.Open();
SqlDataAdapter objAdapter = new SqlDataAdapter("Select top 5 * from customers where country='USA'",objConn);
objAdapter.Fill(objDataset);
DataView oView = new DataView(objDataset.Tables[0]);
dgExcel.DataSource = oView;
dgExcel.DataBind();
objConn.Close();
objConn.Dispose();
objConn = null;
if(Request.QueryString["bExcel"] == "1")
{
Response.ContentType = "application/vnd.ms-excel";
Response.Charset = "";
//关闭 ViewState
EnableViewState = false;
System.IO.StringWriter tw = new System.IO.StringWriter();//将信息写入字符串
System.Web.UI.HtmlTextWriter hw = new System.Web.UI.HtmlTextWriter(tw);//在WEB窗体页上写出一系列连续的HTML特定字符和文本。
//此类提供ASP.NET服务器控件在将HTML内容呈现给客户端时所使用的格式化功能
//获取control的HTML
dgExcel.RenderControl(hw);//将DATAGRID中的内容输出到HtmlTextWriter对象中
// 把HTML写回浏览器
Response.Write(tw.ToString());
Response.End();
}
}
{
DataSet objDataset = new DataSet();
SqlConnection objConn = new SqlConnection();
objConn = new SqlConnection(ConfigurationSettings.AppSettings["ConnectionSqlServer"].ToString());
objConn.Open();
SqlDataAdapter objAdapter = new SqlDataAdapter("Select top 5 * from customers where country='USA'",objConn);
objAdapter.Fill(objDataset);
DataView oView = new DataView(objDataset.Tables[0]);
dgExcel.DataSource = oView;
dgExcel.DataBind();
objConn.Close();
objConn.Dispose();
objConn = null;
if(Request.QueryString["bExcel"] == "1")
{
Response.ContentType = "application/vnd.ms-excel";
Response.Charset = "";
//关闭 ViewState
EnableViewState = false;
System.IO.StringWriter tw = new System.IO.StringWriter();//将信息写入字符串
System.Web.UI.HtmlTextWriter hw = new System.Web.UI.HtmlTextWriter(tw);//在WEB窗体页上写出一系列连续的HTML特定字符和文本。
//此类提供ASP.NET服务器控件在将HTML内容呈现给客户端时所使用的格式化功能
//获取control的HTML
dgExcel.RenderControl(hw);//将DATAGRID中的内容输出到HtmlTextWriter对象中
// 把HTML写回浏览器
Response.Write(tw.ToString());
Response.End();
}
}