Asp.net의 GridView에서 발생한 두 가지 문제 및 해결 방법 내보내기

3258 단어
GridView에서 내보낸 컨텐츠에 대한 코드는 대체로 다음과 같습니다.
Response.Clear();
Response.Buffer = true;
Response.Charset = "GB2312";
Response.AppendHeader("Content-Disposition", "attachment;filename="+ fileName + ".xls");
Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");
Response.ContentType = "application/ms-excel";
this.EnableViewState = false;
System.Globalization.CultureInfo myCItrad = new System.Globalization.CultureInfo("ZH-CN", true);
System.IO.StringWriter oStringWriter = new System.IO.StringWriter(myCItrad);
System.Web.UI.HtmlTextWriter oHtmlTextWriter = new System.Web.UI.HtmlTextWriter(oStringWriter);
this.grid1.RenderControl(oHtmlTextWriter); Response.Write(oStringWriter.ToString());
Response.End();
//grid1은 테이블의 ID입니다.
주: 파란색 표지 코드는 잘못된 줄 코드입니다.
OK, 어렵게 코드를 두드리고 프로그램 테스트를 실행한다.차, 잘못 신고했어.
문제1: "Grid1"형식의 컨트롤 "gvCompareDetail"은runat=server가 있는 창 표시줄에 넣어야 합니다.
참고: Grid1은 테이블의 ID입니다.
검색 방법은 다음과 같습니다.
1) Grid를 칸에 넣는다.
2) Grid에 runat="server"를 표시합니다.
프론트 데스크톱 Grid에runat="server"가 표시되어 있고 표는form에 놓여 있음을 확인합니다.
해결 방법: 백그라운드 코드에 다음 재작성 방법 추가public override void Verify Rendering InServerForm(Ctrol control)
{ }
MSDN 설명을 찾습니다. 이 함수는 런타임에 지정된 ASP를 확인하는 데 사용됩니다.NET 이동 컨트롤Form 컨트롤이 표시됩니다.
구문:
C#
 
  
public override void VerifyRenderingInServerForm(
    Control control
)

매개 변수
control
유형: System.Web.UI..::.Control
Form 컨트롤의 ASP에 있어야 합니다.NET 이동 컨트롤.
비고
Form에 런타임 컨트롤이 없는 경우 이 메서드는 Page...:.예외를 유발하는 Verify Rendering InServerForm 메서드
클라이언트 스크립트를 다시 보내거나 사용하는 서버 컨트롤이 HtmlForm 서버 컨트롤 () 표시에 포함되지 않으면 정상적으로 작동하지 않습니다.이 컨트롤러들은 HtmlForm 컨트롤러에 포함되지 않았을 때 명확한 오류 정보를 제공하기 위해 보일 때 이 방법을 호출할 수 있습니다.
사용자 정의 서버 컨트롤을 개발할 때, 보통 모든 종류의 입력 표시에 Render 방법을 다시 쓸 때 이 방법을 사용합니다.이것은 컨트롤을 입력하여 GetPostBack Event Reference를 호출하거나 클라이언트 스크립트를 보낼 때 특히 중요합니다.복합 서버 컨트롤러는 이 호출을 할 필요가 없습니다.
OK, 이상의 함수를 더해서 디버깅을 컴파일합니다.헐, 또 다른 착오가 생겼다.
문제2: Render()를 실행하는 동안에만 RegisterForEventValidation을 호출할 수 있습니다.
보아하니 위에서 덧붙인 그 함수는 결코 문제를 철저히 해결하지 못한 것 같다.
한차례의 수색과 시도를 거쳐 마침내 문제를 해결하였다.
해결 방법1: 위의 함수인 Verify Rendering InserverForm을 제거하고 코드를 내보낼 때 동적으로 포름 대상, 페이지 대상을 추가하고 표를 추가하여 포름을 페이지에 추가합니다.
내보낸 코드는 다음과 같습니다.
 
  
Page p=new Page();
HtmlForm form=new HtmlForm();
Grid1.EnableViewState = false;
p.EnableEventValidation = false;
p.DesignerInitialize();
form.Controls.Add(Grid1);
p.Controls.Add(form);
StringBuilder sb=new StringBuilder();
StringWriter sw=new StringWriter(sb);
p.RenderControl(sw);
Response.Clear();
Response.Buffer = true;
Response.ContentType = "application/vnd.ms-excel";
Response.AddHeader("Content-Disposition", "attachment;filename=" + fileName + ".xls");
Response.Charset = "UTF-8";
Response.ContentEncoding = Encoding.Default;
Response.Write(sb.ToString());
Response.End();

해결 방법2: 웹을 수정합니다.config(권장하지 않음)

좋은 웹페이지 즐겨찾기