复制列更少的listview

本文关键字:listview 复制 | 更新日期: 2023-09-27 18:13:06

我有一个列表视图在我的asp页面,我需要导出它在代码后面excel (c#)。但是,我不希望导出所有列。

是否有可能复制ListView到一个新的ListView对象与更少的列?或者有另一种方法导出列表视图与更少的列到excel?

这是我如何导出代码excel后面的代码:

protected void ExportToExcel(object sender, EventArgs e)
{   
    string attachment = "attachment; filename=MyData.xls";
    Response.ClearContent();
    Response.AddHeader("content-disposition", attachment);
    Response.ContentType = "application/ms-excel";
    Response.ContentEncoding = Encoding.Unicode;
    Response.BinaryWrite(Encoding.Unicode.GetPreamble());
    StringWriter stw = new StringWriter();
    HtmlTextWriter htextw = new HtmlTextWriter(stw);                
    // How can I render myListView with fewer columns?
    myListView.RenderControl(htextw);
    Response.Write(stw.ToString());
    Response.End();
}

提前致谢

复制列更少的listview

class ListViewToCSV
{
    public static void ListViewToCSV(ListView listView, string filePath, bool includeHidden)
    {
        //make header srting
        StringBuilder result = new StringBuilder();
        WriteCSVRow(result, listView.Columns.Count, i => includeHidden || listView.Columns[i].Width > 0, i => listView.Columns[i].Text);
        //export data rows
        foreach (var listItem in listView.Items)
            WriteCSVRow(result, listView.Columns.Count, i => includeHidden || listView.Columns[i].Width > 0, i => listItem.SubItems[i].Text);
        File.WriteAllText(filePath, result.ToString());
    }
    private void WriteCSVRow(StringBuilder result, int itemsCount, Func<int, bool> isColumnNeeded, Func<int, string> columnValue)
    {
        bool isFirstTime = true;
        for (int i = 0; i < itemsCount; i++)
        {
            if (!isColumnNeeded(i))
                continue;
            if (!isFirstTime)
                result.Append(",");
            isFirstTime = false;
            result.Append(String.Format("'"{0}'"", columnValue(i)));
        }
        result.AppendLine();
    }
}