Как экспортировать элемент управления Gridview в Excel в DotNetNuke?

Есть ли альтернатива этому, так как использование <form runat="server"> вызовет ошибку 500.

public override void VerifyRenderingInServerForm(Control control)
{
    /* Verifies that the control is rendered */
}

ОТРЕДАКТИРОВАНО

С помощью @HansDerks я в итоге использовал следующее (оживленную версию предоставленного решения):

protected void Export_Click(object sender, System.EventArgs e)
    {
        StringWriter writer = new StringWriter();
        HtmlTextWriter htmlWriter = new HtmlTextWriter(writer);
        GridView gridView = new GridView();
        gridView.DataSource = MySqlDataSource;
        gridView.AutoGenerateColumns = true;
        gridView.DataBind();
        gridView.HeaderRow.Style.Add("background-color", "#003c74");
        gridView.HeaderRow.Style.Add("color", "#ffffff");
        for (int i = 0; i < gridView.Rows.Count; i++)
        {
            GridViewRow row = gridView.Rows[i];

            //Change Color back to white
            row.BackColor = System.Drawing.Color.White;

            //Apply text style to each Row
            row.Attributes.Add("class", "textmode");

            //Apply style to Individual Cells of Alternating Row
            if (i % 2 != 0)
            {
                row.BackColor = System.Drawing.Color.AliceBlue;
            }
        }
        gridView.RenderControl(htmlWriter);
        htmlWriter.Close();

        Response.Clear();
        Response.AddHeader("content-disposition", "attachment;filename=filename.xls");
        Response.Charset = "";
        Response.Write(writer.ToString());
        Response.End();
    }

Я надеюсь, что вы, ребята, найдете это полезным. Всем спасибо!


person Skullomania    schedule 12.09.2013    source источник
comment
Есть ли альтернатива использованию чего?   -  person Chris Hammond    schedule 12.09.2013
comment
@ChrisHammond public override void VerifyRenderingInServerForm(Control control) В настоящее время я рассматриваю возможность использования элементов управления телериком. У меня проблемы, так как я не могу скомпилировать без QuickStart.dll   -  person Skullomania    schedule 12.09.2013
comment
@ChrisHammond без телерика есть другой способ? Я не могу использовать VerifyRenderingInServerForm в своем пользовательском модуле, потому что он основан на использовании тега <form runat="server">. В настоящее время я исследую вариант телерика. Если есть другой способ, пожалуйста, дайте мне знать? Если у вас есть образец модуля, на который я могу сослаться, пожалуйста, дайте мне знать. Я использую DNN 6.2.5   -  person Skullomania    schedule 12.09.2013


Ответы (2)


Если у вас есть источник данных, вы можете попробовать это (замените таблицу данных соответствующим источником данных)

private void DataTableToExcel(DataTable dataTable)
{
    StringWriter writer = new StringWriter();
    HtmlTextWriter htmlWriter = new HtmlTextWriter(writer);
    GridView gridView = new GridView();
    gridView.DataSource = dataTable;
    gridView.AutoGenerateColumns = true;
    gridView.DataBind();
    gridView.RenderControl(htmlWriter);
    htmlWriter.Close();

    Response.Clear();
    Response.AddHeader("content-disposition", "attachment;filename=FileName.xls");
    Response.Charset = "";
    Response.Write(writer.ToString());
    Response.End();
}
person Hans Derks    schedule 13.09.2013
comment
Работает прекрасно ... Я немного оживил его, но я не уверен, что правильно следовал моему порядку операций, я размещу свой окончательный вариант в своем исходном сообщении в разделе Отредактировано - person Skullomania; 13.09.2013

Если вы используете элемент управления сеткой DNN, основанный на элементе управления Telerik, вы можете экспортировать видимое содержимое сетки с помощью:

protected void OnExportCSVClick(Object sender, EventArgs e)
{
    grdMemberTypes.MasterTableView.ExportToCSV();
}

Однако это относится к DNN 7.0.

К сожалению, если у вас включен пейджинг, он выводит данные только из видимых строк.

person Daz    schedule 13.09.2013