我是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=">>"
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>
答案 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();
}