2013-02-26 3 views
0

나는 GridView을 사용 중이며 정렬 및 페이지하려고합니다. DataBase에 20 개 이상의 행이 있지만 GridView가 10을 보여줍니다.
AllowPaging=true을 설정했는데 문제가 발생했습니다.
또한 AllowSorting = trueOnSorting="GridView_Sorting"을 사용하고 있습니다. 그러나 해당 열의 내용을 정렬하기 위해 머리글을 클릭하면 내 OnSorting="GridView_Sorting"에 들어 가지 않습니다. 바로 GridView1_RowCommand으로갑니다 왜?
때때로 그냥 나에게이 오류 제공 :
Object reference not set to an instance of an object errorGridView 문제 정렬 및 페이징

을 여기 내 코드입니다 :

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" style="font-family: Verdana, Arial, Sans-Serif;" 

    CssClass="gridview" OnSorting="GridView_Sorting" 
    AllowSorting ="True" AllowPaging="True" BackColor="#CCCCCC" 
    BorderStyle="Inset" BorderWidth="2px" BorderColor="GrayText" 
    CellPadding="1" 
    CellSpacing="5" 
    HeaderStyle-HorizontalAlign="Center" 
    OnRowDataBound="GridView1_RowDataBound" 
    ForeColor = "Black" RowStyle-CssClass="gridview" 
    OnRowCommand="GridView1_RowCommand">    
    <AlternatingRowStyle BackColor="#CCCCCC" /> 
     <columns> 
      <asp:BoundField HeaderText="ID" DataField="id" SortExpression="id" /> 
      <asp:BoundField HeaderText="PRIORIDADE" DataField="prioridade" ItemStyle-HorizontalAlign="Center" SortExpression="prioridade" SortExpression="prioridade" /> 
      <asp:BoundField HeaderText="SITUAÇÃO" DataField="situacao" ItemStyle-HorizontalAlign="Center" > 
      <ItemStyle HorizontalAlign="Center" /> 
      </asp:BoundField> 
      <asp:BoundField HeaderText="RESPONSAVEL" DataField="responsavel" HeaderStyle-Width="65px" ItemStyle-HorizontalAlign="Center"> 
      <HeaderStyle Width="65px" /> 
      <ItemStyle HorizontalAlign="Center" /> 
      </asp:BoundField> 
      <asp:BoundField HeaderText="DATA DE CADASTRO" DataField="dt_cadastro" SortExpression="dt_cadastro" DataFormatString="{0:dd/MM/yyyy}" HeaderStyle-Width="60px"ItemStyleHorizontalAlign="Center" > 
      <HeaderStyle Width="60px" /> 
      <ItemStyle HorizontalAlign="Center" /> 
      </asp:BoundField> 
      <asp:BoundField HeaderText="PREVISÃO DE TÉRMINO" DataField="previsao_termino" DataFormatString="{0:dd/MM/yyyy}" HeaderStyle-Width="60px" 
      ItemStyle-HorizontalAlign="Center"> 
      <HeaderStyle Width="60px" /> 
      <ItemStyle HorizontalAlign="Center" /> 
      </asp:BoundField> 
      <asp:BoundField HeaderText="PROJETO" DataField="projeto" ItemStyle-HorizontalAlign="Center"></asp:BoundField> 
      <asp:BoundField HeaderText="FUNCIONALIDADE" DataField="funcionalidade" ItemStyle-HorizontalAlign="Center" /> 
      <asp:BoundField HeaderText="CLUBE" DataField="clube" ItemStyle-HorizontalAlign="Center" /> 
      <asp:TemplateField HeaderStyle-Width="70px" HeaderText="VISUALIZAR" > 
      <ItemTemplate> 
      <asp:Button ID="Btn_Visualizar" runat="server" Text="VISUALIZAR" CssClass="Btn_Grid" Font-Size="7pt" Font-Names="Verdana, Arial" OnClick="Btn_Visualizar_Click"CommandName="visualizar" CommandArgument="<%# ((GridViewRow)Container).RowIndex %>" />        
      </ItemTemplate> 
      </asp:TemplateField> 
      <asp:TemplateField HeaderStyle-Width="66px" HeaderText="ALTERAR"> 
      <ItemTemplate> 
      <asp:Button ID="Btn_Alterar" runat="server" Text="ALTERAR" CssClass="Btn_Grid" Font-Size="7pt" Font-Names="Verdana, Arial"CommandName="editar" CommandArgument="<%# ((GridViewRow)Container).RowIndex %>" /> 
      </ItemTemplate> 
     </asp:TemplateField> 
     <asp:TemplateField HeaderStyle-Width="66px" HeaderText="FEEDBACK"> 
     <ItemTemplate> 
     <asp:Button ID="Btn_Feedback" runat="server" Text="ADICIONAR" CssClass="Btn_Grid" Font-Size="7pt" Font-Names="Verdana,Arial"CommandName="feedback" CommandArgument="<%# ((GridViewRow)Container).RowIndex %>" /> 
     </ItemTemplate> 
     </asp:TemplateField> 
     </columns> 

내 코드 숨김 :

protected void GridView_Sorting(object sender, GridViewSortEventArgs e) 
     { 
      string[] strSortExpression = ViewState["SortExpression"].ToString().Split(' '); 

      // If the sorting column is the same as the previous one, 
      // then change the sort order. 
      if (strSortExpression[0] == e.SortExpression) 
       { 
       if (strSortExpression[1] == "ASC") 
       { 
        ViewState["SortExpression"] = e.SortExpression + " " + "DESC"; 
       } 
       else 
       { 
        ViewState["SortExpression"] = e.SortExpression + " " + "ASC"; 
       } 
      } 
       // If sorting column is another column, 
       // then specify the sort order to "Ascending". 
      else 
      { 
       ViewState["SortExpression"] = e.SortExpression + " " + "ASC"; 
      } 
      // Rebind the GridView control to show sorted data. 
      GridView1.DataSource = ch.BuscaTodosChamados(); 
      GridView1.DataBind(); 
     } 

답변

0

각 정렬 열의 SortExpression 속성을 추가, DataField에 알립니다.

+0

필자는 코드를 몇 초 전에 업데이트했다 ... 이미 그랬다가, 대신'OnSorting' 이벤트에 설정된'GridView_Sorting' 이벤트로 간다.'RowCommand' 이벤트로 바로 간다. 왜 ? – Ghaleon

+0

모든 GridView 클릭 이벤트에서 공통적 인 동작입니다. CommandName 속성을 사용하여 어떤 명령이 이벤트를 시작했는지 확인하는 것은 사용자의 몫입니다. 그러나 그리드 정렬을 방해하지는 않습니다. RowCommand 이벤트를 통과 한 직후 Sorting 이벤트가 호출됩니다. – lockdown87

+0

내 질문을 업데이 트, 내 codebehind보세요 ... 그것은 아직 = \ – Ghaleon

관련 문제