在c#中进行Gridview分页,动态SQL查询

时间:2013-11-26 04:56:06

标签: c# sql sql-server gridview

我是c#的新手,使用Visual Studio 2010。

我创建了一个网格视图并启用了分页。它适用于所有数据。

但是我在页面顶部有很少的下拉和过滤按钮。当我按下每个过滤器按钮时,网格视图仅显示过滤数据。

我为按钮点击事件编写了每个SQL语句。

假设我有60条记录,网格视图显示每页10条记录。当我单击过滤器按钮并假设它只显示25条记录。这意味着只有3页显示。这没关系并且有效。但是,当我点击第二页或第三页时,它将再次显示所有数据,即5页。

我知道问题是它运行默认的SQL查询(我用它来以图形方式将数据绑定到网格视图)。但我需要知道如何解决它。我只需要显示每个页面而不更改过滤后的数据。

这是我的网格视图代码:

<asp:GridView ID="GridView1" runat="server"
    AutoGenerateColumns="False" DataKeyNames="DocumentID"
    DataSourceID="SqlDataSource1" CellPadding="4" ForeColor="#333333" GridLines="None"
    onselectedindexchanged="GridView1_SelectedIndexChanged"
    style="font-family: Tahoma; font-size: small; text-align: center;"
    Width="100%" AllowPaging="True" AllowSorting="True"
    onpageindexchanging="GridView1_PageIndexChanging">
    <AlternatingRowStyle BackColor="White" ForeColor="#284775" />
    <Columns>
    <asp:BoundField DataField="DocumentID" HeaderText="Document ID"
    InsertVisible="False" ReadOnly="True" SortExpression="DocumentID" />
    <asp:BoundField DataField="DocumentType" HeaderText="Document Type"
    SortExpression="DocumentType" />
    <asp:BoundField DataField="ReceivedDate" HeaderText="Received Date"
    SortExpression="ReceivedDate" DataFormatString="{0:dd/MM/yyyy}" />
    <asp:BoundField DataField="Title" HeaderText="Title" SortExpression="Title" />
    <asp:CommandField SelectText="&gt;&gt;"
    ShowSelectButton="True" />
    </Columns>
    <EditRowStyle BackColor="#999999" />
    <FooterStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
    <HeaderStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
    <PagerSettings PageButtonCount="5" Mode="NumericFirstLast" />
    <PagerStyle BackColor="#284775" ForeColor="White" HorizontalAlign="Center" />
    <RowStyle BackColor="#F7F6F3" ForeColor="#333333" />
    <SelectedRowStyle BackColor="#E2DED6" Font-Bold="True" ForeColor="#333333" />
    <SortedAscendingCellStyle BackColor="#E9E7E2" />
    <SortedAscendingHeaderStyle BackColor="#506C8C" />
    <SortedDescendingCellStyle BackColor="#FFFDF8" />
    <SortedDescendingHeaderStyle BackColor="#6F8DAE" />
    <PagerSettings Mode="NumericFirstLast" PageButtonCount="10"  FirstPageText="First" LastPageText="Last"/>
</asp:GridView>

我的pageindexchanging

    protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
    {
        GridView1.PageIndex = e.NewPageIndex;
        //GridView1.DataBind();
    }

这是我的SqlDataSource

<asp:SqlDataSource ID="SqlDataSource1" runat="server" 
    ConnectionString="<%$ ConnectionStrings:ConnectionString %>" 
    SelectCommand="SELECT InwardDetails.DocumentID, InwardDetails.Title, DocumentTypeDetails.DocumentType, InwardDetails.ReceivedDate FROM InwardDetails INNER JOIN DocumentTypeDetails ON InwardDetails.DocumentType = DocumentTypeDetails.DocumentTypeID"> 
</asp:SqlDataSource> 

1 个答案:

答案 0 :(得分:1)

从后面的代码绑定网格。当您使用任何过滤器时,使用 rowfilter 过滤数据,再次绑定网格以提供更新的数据。每次应用或删除过滤器时都使用数据绑定以获取新数据。

protected void Button1_Click(object sender, EventArgs e)
{

    DataSet ds = new DataSet();
    SqlConnection myCon = new SqlConnection(connectionstring);
    SqlDataAdapter adapter = new SqlDataAdapter(cmd, myCon);
    adapter.Fill(ds);
    DataView view = new DataView();
    view.Table = ds.Tables[0];
    view.RowFilter = "ColumnName = " + TextBox1.Text.Trim();
    GridView1.DataSource = view;
    GridView1.DataBind();
}