Usar o FilterExpression do SqlDataSrouce na GridView

Se quiser dar a possibilidade do utilizador filtrar os dados que está a ver na gridview, uma das formas é usar o FilterExpression do SqlDataSource ligado à gridview.

Algo do genero: 

if(!string.IsNullOrEmpty(txtFiltro.Text.Trim()))
{
sqlDsTeste.FilterExpression = String.Format(“nome like ‘%{0}%’”, txtFiltro.Text);
}
else
{
sqlDsTeste.FilterExpression =
“”;
}

O problema está quando o filtro retorna por exemplo um nº de resultados que seja superior ao definido para mostrar por página, fazendo com que ao mudar de página o filtro seja “esquecido” devido ao PostBack e mostre novamente todos os resultados da query no SelectCommand do SqlDataSource.

Para contornar isto usei o ViewState e adicionei após definir a FilterExpression o seguinte:

ViewState.Add(“filtro”, sqlDsTeste.FilterExpression);
E depois no Page_Load adiciono o seguinte para aplicar o filtro definido antes do refresh à página:
</p>

</span>

(ViewState[“filtro”] != null)
{
sqlDsTeste.FilterExpression = ViewState[
“filtro”].ToString();
}

 

</span></div>

Se conhecerem uma forma mais rápida e/ou correcta avisem 🙂