천객만래 [千客萬來] (It has an interminable succession of visitors)


DataSet에 있는 내용을 엑셀로 다운로드 하기 위해서 DataGrid를 사용합니다.
DataGrid 클래스를 생성하여 DataSet을 바인딩한 다음 엑셀에 보여질 스타일등을 지정해준 다음
해당 웹페이지에 Response 하면 됩니다.

 

private void Page_Load(object sender, System.EventArgs e)
{

    // 엑셀로 만들 데이터를 DataSet에 채웁니다.
    DataSet dsResult = GetMemberList();  

 

    // DataGrid와 DataTable의 각 필드에 상응하는 BoundColumn을 만들어 ArrayList에 추가합니다.

    ArrayList arrColumn = new ArrayList();
    arrColumn.Add(CreateBoundColumn("MEMID", "아이디"));
    arrColumn.Add(CreateBoundColumn("MEMNAME", "이름"));
    arrColumn.Add(CreateBoundColumn

            ("JOINDATE", "가입일", "{0:yyyy/MM/dd}", HorizontalAlign.Center));
    arrColumn.Add(CreateBoundColumn

            ("MILEAGE", "포인트", "{0:###,##0}", HorizontalAlign.Center));

 

    string fileName = "members_" + DateTime.Now.ToString("yyyyMMdd") + ".xls";

    SaveAsExcel(dsResult, arrColumn, "회원리스트", fileName);
}

 

public void SaveAsExcel(DataSet dsResult, ArrayList columns, string subject, string fileName)
{

    // 다운로드시 사용할 파일명을 설정합니다.
    if(fileName.Equals(null) && fileName.Equals(""))
        fileName = DateTime.Now.ToString("yyyyMMdd")+".xls";

 

    System.Web.HttpContext.Current.Response.Buffer = true;

 

    // DataGrid를 생성합니다.

    DataGrid dgExcel = new DataGrid();
    dgExcel.ShowHeader = true;

    dgExcel.Caption =  subject;

 

    // DataGrid에 Header 텍스트를 추가합니다.
    dgExcel.AutoGenerateColumns = false;

    foreach(object column in columns)
        dgExcel.Columns.Add((BoundColumn)column);

 

   // DataGrid의 스타일을 지정합니다.

    dgExcel.HeaderStyle.BackColor = Color.FromName("powderblue");
    dgExcel.HeaderStyle.HorizontalAlign = HorizontalAlign.Center;
    dgExcel.HeaderStyle.Height = 25;
    dgExcel.HeaderStyle.Font.Bold = true;

 

    // DataGrid에 DataSet의 내용을 채웁니다.

    dgExcel.DataSource = dsResult;
    dgExcel.DataBind();

 

    // DataGrid를 웹페이지에 쓰기 시작...

 

    System.Web.HttpContext.Current.Response.AddHeader
        ("Content-Disposition", string.Format("attachment;filename={0}", fileName));
    System.Web.HttpContext.Current.Response.ContentType = "application/unknown";
    // System.Web.HttpContext.Current.Response.ContentType = "application/vnd.ms-excel";

 

    /////////////////////////////////////////////////////////////////////////////////////////////////
    ///  한글이 깨지는 경우 web.config의 globalization을 euc-kr로 바꿔주세요.
    /// <globalization requestEncoding="euc-kr" responseEncoding="euc-kr" />
    /////////////////////////////////////////////////////////////////////////////////////////////////

    System.Web.HttpContext.Current.Response.Write
        ("<meta http-equiv=Content-Type content='text/html; charset=ks_c_5601-1987'>");

 

    dgExcel.EnableViewState = false;


    System.IO.StringWriter sWriter = new System.IO.StringWriter();
    System.Web.UI.HtmlTextWriter htmlWriter = new System.Web.UI.HtmlTextWriter(sWriter);

    dgExcel.RenderControl(htmlWriter);

 

    System.Web.HttpContext.Current.Response.Write(sWriter.ToString());
    System.Web.HttpContext.Current.Response.End();


    dgExcel.Dispose();
}

 

// DataGrid의 반복적인 컬럼 생성 작업을 하는 메서드입니다.

public BoundColumn CreateBoundColumn(string DataFieldValue, string HeaderTextValue)
{
    // Create a BoundColumn.
    BoundColumn column = new BoundColumn();

 

    // Set the properties of the BoundColumn.
    column.DataField = DataFieldValue;
    column.HeaderText = HeaderTextValue;
    return column;
}

 

public BoundColumn CreateBoundColumn

   (string DataFieldValue, string HeaderTextValue, string FormatValue, HorizontalAlign AlignValue)
{
  
  // Create a BoundColumn using the overloaded CreateBoundColumn method.
    BoundColumn column = CreateBoundColumn(DataFieldValue, HeaderTextValue);

 

    // Set the properties of the BoundColumn.
    column.DataFormatString = FormatValue;
    column.ItemStyle.HorizontalAlign = AlignValue;
    return column;
}




쌈꼬쪼려 소백촌닭
Posted by SB패밀리

ItemIndex 속성을 사용하여 DataGrid, DataList, Repeater 컨트롤의 Items 컬렉션에서 가져온 DataGridItem, DataListItem, Repeateritem 개체의 인덱스 번호를 확인합니다.

<asp:Repeater id="Repeater1" runat="server">
    <ItemTemplate>
            <td><%# Container.ItemIndex+1 %> </td>

    </ItemTemplate>
</asp:Repeater>

 

위에서 1을 더해주는 이유는 ItemIndex0부터 시작하기 때문에 1부터 표시해주기 위해서 이다.

쌈꼬쪼려 소백촌닭

Posted by SB패밀리

현재 페이지에 표시된 DataGrid의 내용을 버튼클릭시 다운로드 하는 소스입니다.
필요해서 한번 해봤는데 되네요..

 

DataListRepeater 등 모든 서버컨트롤이나 HTML컨트롤에도 사용 가능합니다! *^^*

 

private void Button1_Click(object sender, System.EventArgs e)
{   
    System.Web.HttpContext.Current.Response.Buffer = true;
    System.Web.HttpContext.Current.Response.AddHeader
        ("Content-Disposition", "attachment;filename=20050614.xls");
   System.Web.HttpContext.Current.Response.ContentType="application/unknown";

 

    // 이부분은 web.config의 <globalization requestEncoding="utf-8"   
    // responseEncoding="utf-8" /> 인코딩 부분과 같도록 맞춰주시면 됩니다.
   

    // 2005.09.26 추가 : 인코딩 문자열을 자동으로 맞추려면

    // Request.ContentEncoding.HeaderName 로 인코딩 문자열을 받아서 사용한다.

    System.Web.HttpContext.Current.Response.Write       
        ("<meta http-equiv=Content-Type content='text/html; charset=utf-8'>");

 

    System.IO.StringWriter sWriter = new System.IO.StringWriter();   
    System.Web.UI.HtmlTextWriter htmlWriter
           = new System.Web.UI.HtmlTextWriter(sWriter);


    DataGrid1.RenderControl(htmlWriter);   


    System.Web.HttpContext.Current.Response.Write(sWriter.ToString());   
    System.Web.HttpContext.Current.Response.End();
}

참조 : http://blog.naver.com/tear230/100013986512

DataGrid를 이용할줄 안다면 GridView도 응용해서 이용할수 있습니다.
Posted by SB패밀리

출처 : HOONS 닷넷

원문 : http://www.hoonsbara.com/hoonsboard.aspx?table_name=asptip&board_idx=445396&page=9&keyword=&search=&boardmode=2

 

웹프로그래밍의 기초인 게시판을 작성할 때 ASP.NET 1.x의 DataGrid를 많이

사용하는데 편리하고 상용 그리드에 비해 가볍지만 기능이 부족한 점(셀 머징, 소팅, 스크롤)이

있습니다.

개인적으로 불만이었던 점 중의 하나가

게시판의 페이지 번호 부분이었는데

DataGrid 컨트롤이

'... 1 2 3 4 5 ...'과 같이 일반적인 게시판에 있는

'[처음][이전]1 2 3 4 5 [다음][마지막]'과

같은 모습을 제공해 주지 않고 있습니다.

이 부분을 커스터마이징 할 수 있는 방법은

DataGrid 컨트롤의 ItemCreated란 이벤트 핸들어에 아래 코드를 추가하면 됩니다.

게시판의 페이저 부분을 '◀ 1 2 [3] 4 5 ▶'로 바꿔줍니다.

 

            bool exist = false;

            if(e.Item.ItemType == ListItemType.Pager)

            {

                 TableCell Pager = (TableCell)e.Item.Controls[0];

                Pager.VerticalAlign = VerticalAlign.Middle;

                for(int n=0; n<Pager.Controls.Count; n+=2)

                {

                    try

                    {

                        Label l = (Label) Pager.Controls[n];

                        l.Text = "["+l.Text+"]";

                        l.CssClass = "plinkstyle";

                    }

                    catch

                    {

                        LinkButton h = (LinkButton) Pager.Controls[n];

                        if((h.Text == "...") && (!exist))

                        {

                            h.Text = "◀";

                            h.CssClass = "plinkstyle";

                        }

                        else if((h.Text == "...") && (exist))

                        {

                            h.Text = "▶";

                            h.CssClass = "plinkstyle";

                        }

                        else

                        {

                            exist = true;

                            h.CssClass = "plinkstyle";

                        }

                    }

                }

            }

 

Posted by SB패밀리