gridview 데이터를 Excel로 내보내는 연구

GridView의 데이터를 Excel로 내보내는 것은 웹 응용 프로그램에서 흔히 볼 수 있는 기능입니다.서로 다른 응용 장면에서 서로 다른 도출 기술이 있다.본문에서 제가 도출한 기술을 소개하겠습니다. 당신에게 도움이 되기를 바랍니다.
GridView Export the Excel (Basic Code):
우선 기초적인 응용을 보자.표를 만듭니다. 캡처 참조.
그런 다음 데이터베이스의 데이터를 GridView의 데이터에 바인딩합니다. 코드는 다음과 같습니다.
복사
보존
private void BindData()
{
    SqlConnection myConnection 
        = new SqlConnection("Server=localhost;Database=School;Trusted_Connection=true");

    SqlDataAdapter ad = new SqlDataAdapter("SELECT * FROM Users", myConnection);
    DataSet ds = new DataSet();
    ad.Fill(ds);
    gvUsers.DataSource = ds;
    gvUsers.DataBind();
}

이제 GridView에 데이터가 바인딩되었습니다. 다음 작업은 Excel로 내보내는 것입니다.다음은 버튼 이벤트의 코드입니다.
복사
보존
Response.ClearContent();
Response.AddHeader("content-disposition", "attachment; filename=MyExcelFile.xls");
Response.ContentType = "application/excel";

StringWriter sw = new StringWriter();
HtmlTextWriter htw = new HtmlTextWriter(sw);
gvUsers.RenderControl(htw);
Response.Write(sw.ToString());
Response.End();

그리고 Verify Rendering InServer Form 방법도 오버라이드해야 합니다. (이 점은 매우 중요합니다. 그렇지 않으면 단추를 누르면 오류가 발생합니다. 번역자 주석) 코드는 다음과 같습니다.
복사
보존
public override void VerifyRenderingInServerForm(Control control)
{
}

내보내기 단추를 누르면 대화상자가 튀어나와 열거나 저장할 것을 묻습니다.열기 파일을 선택하여 다음 그림과 같이 Excel로 내보냅니다.
Exporting GridView to Excel With Style:
당신은 상기 코드에 약간의 문제가 존재하는 것을 알아차렸습니까?예, ID 열의 첫 번째 0이 모두 잘렸습니다.만약 당신의 ID가 000345라면, 내보낸 후에 345를 프로그래밍할 것입니다.이 문제는 css를 출력 흐름에 추가해서 해결할 수 있습니다.ID 열이 올바르게 표시되려면 텍스트 형식으로 저장해야 합니다.Excel의 텍스트 형식은 "mso-number-format:"/@"입니다.
복사
보존
protected void Btn_ExportClick(object sender, EventArgs e)
{
    string style = @"<style> .text { mso-number-format:/@; } </script> ";
    Response.ClearContent();
    Response.AddHeader("content-disposition", "attachment; filename=MyExcelFile.xls");
    Response.ContentType = "application/excel";

    StringWriter sw = new StringWriter();
    HtmlTextWriter htw = new HtmlTextWriter(sw);
    gvUsers.RenderControl(htw);

    // Style is added dynamically
    Response.Write(style);
    Response.Write(sw.ToString());
    Response.End();
}

public override void VerifyRenderingInServerForm(Control control)
{
}

위의 코드에서 "style"변수를 통해 GridView 열의 스타일을 제어합니다.Respnose를 통해Write 메서드는 출력 흐름에 추가합니다.마지막으로 스타일을 ID 열에 추가합니다.이 단계는 RowDataBound 이벤트에서 수행해야 합니다.
복사
보존
protected void gvUsers_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        e.Row.Cells[1].Attributes.Add("class", "text");
    }
}

수정된 결과는 다음과 같습니다.
Exporting GridView With LinkButtons and Paging:
내보내려는 GridView에 LinkButton 또는 페이지 나누기 (페이지 코드가 나타날 경우 번역자 참고) 가 포함된 경우 오류가 발생합니다.
복사
보존
<%@ Page Language="C#" EnableEventValidation="false" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>

페이지 파일을 수정하면 이 문제를 수정할 수 있습니다: EnableEventValidation = "false".
내보낸 파일 보기
내보낸 파일에서linkbutton과dropdownlist 컨트롤을 볼 수 있습니다. 비록 dropdownlist 컨트롤러가 표시하는 데이터는 사용자가 선택한 항목이지만 아무리 봐도 내보낸 파일 같지 않습니다. (나는 매우 쿨하다고 생각합니다:) 번역자 주석) 이제 어떻게 dropdownlist를 제거하고 선택한 문자를 표시해야 합니까?
DisableControls 함수를 썼습니다. 순환하는 방법으로linkbutton과dropdownlist를literal 컨트롤로 바꿉니다.
복사
보존
private void DisableControls(Control gv)
{
    LinkButton lb = new LinkButton();
    Literal l = new Literal();
    string name = String.Empty;

    for (int i = 0; i < gv.Controls.Count; i++)
    {
        if (gv.Controls[i].GetType() == typeof(LinkButton))
        {
            l.Text = (gv.Controls[i] as LinkButton).Text;
            gv.Controls.Remove(gv.Controls[i]);
            gv.Controls.AddAt(i, l);
        }
        else if (gv.Controls[i].GetType() == typeof(DropDownList))
        {
            l.Text = (gv.Controls[i] as DropDownList).SelectedItem.Text;
            gv.Controls.Remove(gv.Controls[i]);
            gv.Controls.AddAt(i, l);
        }

        if (gv.Controls[i].HasControls())
        {
            DisableControls(gv.Controls[i]);
        }
    }
}

방법은 매우 간단합니다. linkbuton과dropdownlist를literal 컨트롤러로 바꾸고 선택 항목을literal 컨트롤러의 텍스트 속성에 값을 부여합니다.이 방법은 내보내기 전에 호출해야 한다
복사
보존
protected void Btn_ExportExcelPaging(object sender, EventArgs e)
{
    DisableControls(gvUsers);
    Response.ClearContent();
    Response.AddHeader("content-disposition", "attachment; filename=MyExcelFile.xls");
    Response.ContentType = "application/excel";

    StringWriter sw = new StringWriter();
    HtmlTextWriter htw = new HtmlTextWriter(sw);
    gvUsers.RenderControl(htw);
    Response.Write(sw.ToString());
    Response.End();
}

지금 엑셀에는 선택된 텍스트만 남았어요.

좋은 웹페이지 즐겨찾기