Grelha do filtro
Tenho uma grelha que estou a ligar através do Código atrás, quero filtrar a grelha com base no valor dado pelo utilizador na caixa de texto.
Seria óptimo se pudesse filtrar a grelha sem qualquer postback. Por favor, ajudem-me!obrigado antecipadamente
3 answers
Você poderia executar uma expressão de filtro
<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>
Ou por aqui
Tem uma caixa de texto fora do GridView, e quando introduzir dados nela e carregar num botão, a janela deverá ser filtrada nesses dados?
Se assim for, certifique-se que o seu comando select pode marcar um parâmetro com o valor que deseja filtrar. Adicione um ControlParameter ao SelectParameters colelction do DataSource control (se usar um Control DataSource).
Aqui está um exemplo que usa o Base de dados Northwind, talvez isto o ajude.<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>
Códigos encontrados aqui http://forums.asp.net/p/1034014/2904713.aspx
Se estiver a usar paging, eu recomendaria a utilização de outra coisa (como o Microsoft Ajax Library dataView ). Porque o gridview paging e a filtragem do lado do cliente não se encaixariam muito bem. Mas se você não está fazendo paging, você poderia fazer algo semelhante a este ou Este .
A área da grelha é feita para manipulação durante o post back. Se você fizesse isso inteiramente do lado do cliente, você usaria uma suíte JavaScript que funcionaria em qualquer mesa, não confinada à área de grade. Se fosse eu, eu simplesmente usaria AJAX, embrulhando a área de grade e caixa de texto em um painel de atualização. Para o usuário final, o comportamento é o mesmo.
Editar para incluir o código da amostra:
<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>