排序和分页GridView问题

时间:2013-02-26 14:06:12

标签: c# asp.net sorting gridview paging

我正在使用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 error

这是我的代码:

<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>

我的CodeBehind:

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();
        }

1 个答案:

答案 0 :(得分:0)

为每个可排序列添加SortExpression属性,通知其DataField。