[ASP.NET] [펌] Gridview에 DataSet을 DataBind()했을 때 페이징 하기

[■Web Programing/OO ASP.NET OO]
[펌] http://blog.outsider.ne.kr/33

이것저것 하다보면 GridView에 수동으로 다른 데이터를 바인딩 시켜야 할 때가 있다. 최근에 사용했을 때는 비연결지향으로 DataSet을 얻어서 DataBind를 시켰는데 이렇게 했을때 페이징이 제대로 되지 않는 문제점이 있었다.

GridView에 DataBide를 꼭 저렇게 안하고 아래에 적혀있듯이 Datasource자체를 바꿔주는 방법을 취할 수도 있고 그럴게 했을 경우는 큰 문제가 생기지 않을 것으로 예상된다.(테스트는 못해봤지만 일단 타입이 동일하므로...)

페이징을 하려면 별도로 비하인드 코드에서 처리르 해주어댜 한다.

해당 Gridview의 속성에서 PageIndexChanging를 생성해 주고 그 Behind코드에 다음 코드를 넣어주면 된다.

  1. protected void AllItemGridView_PageIndexChanging(object sender, GridViewPageEventArgs e)  
  2. {  
  3.     AllItemGridView.PageIndex = e.NewPageIndex;  
  4.     AllItemGridView.DataBind();  
  5. }  

Gridview의 이름이 AllitemGridView이다. 내가 찾은 코드중에는 가장 간단한 코드이며 잘 작동한다.
-- 펌 끝 --

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" CellPadding="0" CellSpacing="1" BorderWidth="2" AllowPaging="true" OnPageIndexChanging="AllItemGridView_PageIndexChanging"
                    BackColor="#bbbbbb" ForeColor="#333333" GridLines="None" Width="100%">

CS단에서 바인딩하는 경우에 이런식으로 처리하면 잘된다.

크리에이티브 커먼즈 라이센스
Creative Commons License

[ASP.NET] GridView Field 를 Hidden Field 로 변경하여 사용

[■Web Programing/OO ASP.NET OO]
    <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"
    DataKeyNames="MATNR" OnRowCreated="SetItemVisibleFalse">

   asp:BoundField DataField="xxx" visible="false" />
   인 경우 CS단에서도 값을 받아 올 수가 없게 된다.

    아래와 같이 Row 생성 시점에 처리를 해주면 CS단에서 값을 받아 처리할 수가 있다.
    protected void SetItemVisibleFalse(object sender, GridViewRowEventArgs e)
    {
        e.Row.Cells[9].Visible = false;
        e.Row.Cells[10].Visible = false;
        e.Row.Cells[11].Visible = false;
    }
크리에이티브 커먼즈 라이센스
Creative Commons License