Я полностью согласен с Джоном Сондерсом, может быть, вы должны попробовать этот путь.
Свяжите набор данных с GridView, а затем загрузите его в Excel.
Используйте приведенный ниже сегмент кода для получения значения из элемента управления
private static void PrepareControlForExport(Control control)
{
for (int i = 0; i < control.Controls.Count; i++)
{
Control current = control.Controls[i];
if (current is LinkButton)
{
control.Controls.Remove(current);
control.Controls.AddAt(i, new LiteralControl((current as LinkButton).Text));
}
else if (current is ImageButton)
{
control.Controls.Remove(current);
control.Controls.AddAt(i, new LiteralControl((current as ImageButton).AlternateText));
}
else if (current is HyperLink)
{
control.Controls.Remove(current);
control.Controls.AddAt(i, new LiteralControl((current as HyperLink).Text));
}
else if (current is DropDownList)
{
control.Controls.Remove(current);
control.Controls.AddAt(i, new LiteralControl((current as DropDownList).SelectedItem.Text));
}
else if (current is CheckBox)
{
control.Controls.Remove(current);
control.Controls.AddAt(i, new LiteralControl((current as CheckBox).Checked ? "True" : "False"));
}
if (current.HasControls())
{
PrepareControlForExport(current);
}
}
}
Теперь создайте метод, который будет загружать данные из gridview.
private void ExportX()
{
HttpContext.Current.Response.Clear();
HttpContext.Current.Response.AddHeader("content-disposition", string.Format("attachment; Filename = ExcelReport.xls"));
Response.Charset = "";
Response.Cache.SetCacheability(HttpCacheability.NoCache);
HttpContext.Current.Response.ContentType = "application/ms-excel";
StringWriter stringWrite = new StringWriter();
HtmlTextWriter htmlWriter = new HtmlTextWriter(stringWrite);
Table table = new Table();
// include the gridline settings
table.GridLines = GridView1.GridLines;
if (GridView1.HeaderRow != null)
{
PrepareControlForExport(GridView1.HeaderRow);
table.Rows.Add(GridView1.HeaderRow);
}
foreach (GridViewRow row in GridView1.Rows)
{
PrepareControlForExport(row);
table.Rows.Add(row);
}
if (GridView1.FooterRow != null)
{
PrepareControlForExport(GridView1.HeaderRow);
table.Rows.Add(GridView1.FooterRow);
}
table.RenderControl(htmlWriter);
Response.Write(stringWrite.ToString());
Response.End();
}
public override void VerifyRenderingInServerForm(Control control)
{
}
Это все, что вам нужно сделать, вызвать вышеуказанный метод для загрузки данных.