none
各位高手,我用webform的listview做了一个绑定。导出excel的时候想隐藏“删除(第7列)”、“更新(第8列)”列,在gridview中可以用gridview1.Columns[7].Visible = false;但是在listview中却没有columns这个东西,请问如何处理呢? RRS feed

  • 问题

  •         #region 导出Excel
            public static void exp_Excel(Control gv, string title,string sheet_Name)
            {
                // 当前对话 
                System.Web.HttpContext curContext = System.Web.HttpContext.Current;
                // IO用于导出并返回excel文件 
                System.IO.StringWriter strWriter = null;
                System.Web.UI.HtmlTextWriter htmlWriter = null;
    
                if (gv != null)
                {
                    // 设置编码和附件格式 
                    HttpContext.Current.Response.Clear();
                    HttpContext.Current.Response.Buffer = true;
                    HttpContext.Current.Response.AddHeader("content-disposition", string.Format("attachment; filename={0}", sheet_Name+".xls"));
    
                    curContext.Response.ContentType = "application/vnd.ms-excel";
                    curContext.Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB18030");
                    curContext.Response.Charset = "";
    
                    // 导出excel文件 
                    strWriter = new System.IO.StringWriter();
                    htmlWriter = new System.Web.UI.HtmlTextWriter(strWriter);
                    htmlWriter.WriteLine(title);
    
                    // 返回客户端 
                    gv.RenderControl(htmlWriter);
                    curContext.Response.Write(strWriter.ToString().Replace("\r\n", "<br style='mso-data-placement:same-cell;'/> "));
                    curContext.Response.End();
                }
            }
            #endregion
    
            protected void btn_Excel_Click(object sender, EventArgs e)
            {
    //想在这里设置lv_Hz.Columns[7].visible=false;可是listview中没有columns这个东西,请教如何处理?
                exp_Excel(lv_Hz, "kh","abc");
            }
    2010年1月12日 16:02

答案

  • 你好,

    试试另外的方法,比如从数据源方面考虑。

    拷贝数据源,将你想要隐藏的列给全部设置为null,然后再绑定导出。


    Microsoft Online Community Support
    • 已标记为答案 杜宏宇 2010年1月13日 8:33
    2010年1月13日 3:42
  • 你好!

    可以考虑重新绑定一个 ListView 用于导出,或者使用数据源的方式直接导出,如下:

    <%@ Page Language="C#" AutoEventWireup="true"%>
    <%@ Import Namespace="System.Data" %>
    <%@ Import Namespace="System.IO" %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <script runat="server">
    
        protected void Button1_Click(object sender, EventArgs e)
        {
            // 生成一个测试表
            DataTable dt = new DataTable();
    
            dt.Columns.Add("Col1", typeof(Guid));
            dt.Columns.Add("Col2", typeof(Guid));
    
            while (dt.Rows.Count < 10)
                dt.Rows.Add(new object[] { Guid.NewGuid(), Guid.NewGuid() });
    
            this.ExportToExcel(dt, "YourTableName.xls"); // 以字符串的方式导出
        }
    
        public void ExportToExcel(DataTable fDataTable, string fFileName)
        {
            Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");
            Response.AppendHeader("Content-Disposition", string.Format("attachment;filename={0}", fFileName));
    
            StringBuilder builder = new StringBuilder();
            String output = string.Empty;
    
            foreach (DataColumn col in fDataTable.Columns)
                output += (String.IsNullOrEmpty(output) ? string.Empty : "\t") + col.Caption; // 如需要改列字需要提前设置 Column.Caption
    
            builder.AppendLine(output);
    
            foreach (DataRow row in fDataTable.Rows)
            {
                output = string.Empty;
                foreach (DataColumn col in fDataTable.Columns)
                    output += (String.IsNullOrEmpty(output) ? string.Empty : "\t") + row[col].ToString();
                
                builder.AppendLine(output);
            }
    
            Response.Write(builder.ToString());
            Response.End();
        }
    </script>
    
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title>Export to excel demos, 20100113</title>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
            <asp:Button ID="Button1" runat="server" Text="Export To Excel" 
                onclick="Button1_Click" />
            </div>
        </form>
    </body>
    </html>

    知识改变命运,奋斗成就人生!
    • 已标记为答案 杜宏宇 2010年1月13日 8:33
    2010年1月13日 5:15
    版主

全部回复

  • 你好,

    试试另外的方法,比如从数据源方面考虑。

    拷贝数据源,将你想要隐藏的列给全部设置为null,然后再绑定导出。


    Microsoft Online Community Support
    • 已标记为答案 杜宏宇 2010年1月13日 8:33
    2010年1月13日 3:42
  • 你好!

    可以考虑重新绑定一个 ListView 用于导出,或者使用数据源的方式直接导出,如下:

    <%@ Page Language="C#" AutoEventWireup="true"%>
    <%@ Import Namespace="System.Data" %>
    <%@ Import Namespace="System.IO" %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <script runat="server">
    
        protected void Button1_Click(object sender, EventArgs e)
        {
            // 生成一个测试表
            DataTable dt = new DataTable();
    
            dt.Columns.Add("Col1", typeof(Guid));
            dt.Columns.Add("Col2", typeof(Guid));
    
            while (dt.Rows.Count < 10)
                dt.Rows.Add(new object[] { Guid.NewGuid(), Guid.NewGuid() });
    
            this.ExportToExcel(dt, "YourTableName.xls"); // 以字符串的方式导出
        }
    
        public void ExportToExcel(DataTable fDataTable, string fFileName)
        {
            Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");
            Response.AppendHeader("Content-Disposition", string.Format("attachment;filename={0}", fFileName));
    
            StringBuilder builder = new StringBuilder();
            String output = string.Empty;
    
            foreach (DataColumn col in fDataTable.Columns)
                output += (String.IsNullOrEmpty(output) ? string.Empty : "\t") + col.Caption; // 如需要改列字需要提前设置 Column.Caption
    
            builder.AppendLine(output);
    
            foreach (DataRow row in fDataTable.Rows)
            {
                output = string.Empty;
                foreach (DataColumn col in fDataTable.Columns)
                    output += (String.IsNullOrEmpty(output) ? string.Empty : "\t") + row[col].ToString();
                
                builder.AppendLine(output);
            }
    
            Response.Write(builder.ToString());
            Response.End();
        }
    </script>
    
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title>Export to excel demos, 20100113</title>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
            <asp:Button ID="Button1" runat="server" Text="Export To Excel" 
                onclick="Button1_Click" />
            </div>
        </form>
    </body>
    </html>

    知识改变命运,奋斗成就人生!
    • 已标记为答案 杜宏宇 2010年1月13日 8:33
    2010年1月13日 5:15
    版主