2009-09-11 3 views
0

Я получаю следующую ошибкуНаписать GridView, чтобы преуспеть страницу

Error: Sys.WebForms.PageRequestManagerParserErrorException: The message received from the server could not be parsed. Common causes for this error are when the response is modified by calls to Response.Write(), response filters, HttpModules, or server trace is enabled. 

Я хочу поставить сетку в первенствует OnClick

Sub bttntxtfile_Click(ByVal sender As Object, ByVal e As EventArgs) 
    GridViewExportUtil.Export("Customers.xls", GridView1) 
End Sub 

public class GridViewExportUtil 
{ 

public static void Export(string fileName, GridView gv) 
{ 
    HttpContext.Current.Response.Clear(); 
    HttpContext.Current.Response.AddHeader(
     "content-disposition", string.Format("attachment; filename={0}", fileName)); 
    HttpContext.Current.Response.ContentType = "application/ms-excel"; 

    using (StringWriter sw = new StringWriter()) 
    { 
     using (HtmlTextWriter htw = new HtmlTextWriter(sw)) 
     { 
      // Create a form to contain the grid 
      Table table = new Table(); 

      // add the header row to the table 
      if (gv.HeaderRow != null) 
      { 
       GridViewExportUtil.PrepareControlForExport(gv.HeaderRow); 
       table.Rows.Add(gv.HeaderRow); 
      } 

      // add each of the data rows to the table 
      foreach (GridViewRow row in gv.Rows) 
      { 
       GridViewExportUtil.PrepareControlForExport(row); 
       table.Rows.Add(row); 
      } 

      // add the footer row to the table 
      if (gv.FooterRow != null) 
      { 
       GridViewExportUtil.PrepareControlForExport(gv.FooterRow); 
       table.Rows.Add(gv.FooterRow); 
      } 

      // render the table into the htmlwriter 
      table.RenderControl(htw); 

      // render the htmlwriter into the response 
      HttpContext.Current.Response.Write(sw.ToString()); 

     } 
    } 
} 

/// <summary> 
/// Replace any of the contained controls with literals 
/// </summary> 
/// <param name="control"></param> 
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()) 
     { 
      GridViewExportUtil.PrepareControlForExport(current); 
     } 
    } 
} 
} 

У меня есть два response.redirects, но я заметил их и У меня все еще есть ошибка. Кто-нибудь видел эту ошибку раньше? Я делаю что-то неправильно?

Я думаю, что это что-то делать с httpcontext.current.response.clear и httpContext.current.response.addheader линии

ответ

1

«PageRequestManagerParserError Исключение "может быть вызвано вызовом Response.Write(), если кнопка« Экспорт в Excel »находится внутри панели обновлений. Либо удалите кнопку из панели обновления, либо используйте PostBackTrigger.

См. Статью this за дополнительной информацией.

+0

Спасибо. такой простой ответ, которого я нигде не мог найти. +1 и принятый ответ – Eric

0

Это должно помочь ..

Это больше о чтения/записи Данные, чтобы преуспеть, чем конкретно от GridView, но любой .net программист должен быть в состоянии сделать это ..

http://support.microsoft.com/kb/316934#10

+0

Да. это был мой следующий вариант, если я не мог понять эту ошибку. Я считаю, что разница в том, что я копирую сетку непосредственно в excel, а не в написание текста на листе excel. – Eric