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

Author: Oded, 2010-04-29

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

 5
Author: Justin Gregoire, 2012-07-19 00:08:02

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 .

 2
Author: dochoffiday, 2010-04-29 18:42:24

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>
 1
Author: cortijon, 2010-04-29 20:16:47