我有一个gridview,我通过代码绑定,我想根据用户在文本框中给出的值过滤gridview。
如果我能够在没有任何回发的情况下过滤gridview,那就太棒了。
请帮忙!
提前致谢
答案 0 :(得分:5)
您可以运行过滤器表达式
<asp:sqldatasource id="articles" runat="server"
connectionstring="<%$ ConnectionStrings:aspa %>"
selectcommand="SELECT title, url, added, updated FROM aspx_articles ORDER BY title"
filterexpression="title LIKE '%{0}%' or url LIKE '%{0}%'">
<filterparameters>
<asp:controlparameter controlid="searchBox" propertyname="Text" />
</filterparameters>
</asp:sqldatasource>
或者这样
您是否在GridView外部有一个TextBox,当您输入数据并按下按钮时,GirdView应该对该数据进行过滤?
如果是这样,请确保您的select命令可以使用您要过滤的值来获取参数。将ControlParameter添加到DataSource控件的SelectParameters colelction(如果使用DataSource控件)。
以下是使用Northwind数据库的示例,这可能会对您有所帮助:
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<asp:Button ID="Button1" runat="server" Text="Button" />
<asp:GridView ID="GridView1" runat="server" AllowPaging="True" AutoGenerateColumns="False"
DataKeyNames="ProductID" DataSourceID="SqlDataSource1" ShowFooter="True">
<Columns>
<asp:CommandField ShowSelectButton="True" />
<asp:BoundField DataField="ProductID" HeaderText="ProductID" InsertVisible="False"
ReadOnly="True" SortExpression="ProductID" />
<asp:BoundField DataField="ProductName" HeaderText="ProductName" SortExpression="ProductName" />
<asp:BoundField DataField="UnitsInStock" HeaderText="UnitsInStock" SortExpression="UnitsInStock" />
<asp:BoundField DataField="UnitPrice" HeaderText="UnitPrice" SortExpression="UnitPrice" />
</Columns>
</asp:GridView>
<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:NorthwindConnectionString %>"
SelectCommand="SELECT [ProductID], [ProductName], [UnitsInStock], [UnitPrice] FROM [Alphabetical list of products] WHERE ([ProductName] LIKE '%' + @ProductName + '%')">
<SelectParameters>
<asp:ControlParameter ControlID="TextBox1" DefaultValue="%" Name="ProductName" PropertyName="Text"
Type="String" />
</SelectParameters>
</asp:SqlDataSource>
答案 1 :(得分:2)
如果您正在使用分页,我建议您使用其他内容(例如Microsoft Ajax Library's dataView)。因为gridview分页和客户端过滤不会很好地网格化。但是,如果您没有进行分页,则可以执行与this或this类似的操作。
答案 2 :(得分:1)
网格视图用于回发期间的操作。如果您完全在客户端执行此操作,则可以使用可在任何表上工作的JavaScript套件,而不仅限于网格视图。如果是我,我只需通过在更新面板中包装网格视图和文本框来使用AJAX。对最终用户来说,行为是一样的。
编辑以包含示例代码:
<asp:ScriptManager ID="ScriptManager1" AllowCustomErrorsRedirect="false" runat="server"></asp:ScriptManager>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:TextBox runat="server" ID="txtFilterString" ></asp:TextBox>
<asp:Button runat="server" ID="btnFilter" Text="FilterResults" onclick="btnFilter_Click" />
<asp:GridView runat="server" ID="grdResults"
DataKeyNames="Id"
AllowSorting="true" AllowPaging="true" PageSize="20"
PagerSettings-Mode="NumericFirstLast">
<Columns>
.....
</Columns>
</asp:GridView>
</asp:UpdatePanel>