2009-03-25 4 views
0

J'ai le code (exemple) ci-dessous pour filtrer les résultats de recherche à partir d'une source de données LLBLGen:Peut-on utiliser plusieurs filtres sur une source de données llblgen?

IPredicateExpression firstFilter = new PredicateExpression(); 
firstFilter.Add(new FieldLikePredicate(CustomerFields.FirstName, null, txtSearchFirst.Text.Trim() + "%")); 
llbldsCustomer.FilterToUser = firstFilter; 
llbldsCustomer.DataBind(); 
gridview1.DataBind(); 

Cela fonctionne bien et filtre les résultats lorsque je déclenche ce code. Cependant, si j'ajoute un second filtre, je dois appuyer deux fois sur le code avant de voir les résultats. Ci-dessous est l'extrait avec 2 filtres:

IPredicateExpression firstFilter = new PredicateExpression(); 
firstFilter.Add(new FieldLikePredicate(CustomerFields.FirstName, null, txtSearchFirst.Text.Trim() + "%")); 
firstFilter.Add(new FieldLikePredicate(CustomerFields.LastName, null, txtSearchLast.Text.Trim() + "%")); 
llbldsCustomer.FilterToUser = firstFilter; 
llbldsCustomer.DataBind(); 
gridview1.DataBind(); 

Le problème est bon pour chaque recherche après le premier; Cependant, j'en ai besoin pour travailler sur le premier.

MISE À JOUR: Le code se trouve dans un événement de clic sur un bouton ASP.Net. Il n'y a pas non plus de code dans le bloc d'événements de chargement de page qui affecte cette source de données.

Des idées?

Répondre

0

Je suis incapable de reproduire le comportement que vous voyez dans un scénario de test simple (voir ci-dessous). En outre, sauf si vous utilisez la liaison de paramètres sur la source de données, vous ne devez pas avoir à appeler DataBind sur le contrôle DataSource mais uniquement sur GridView.


Test Case:

DB contient 1 table client avec deux champs varchar (50): FirstName et LastName.

Default.aspx:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="TestWebApp1._Default" %> 
<%@ Register Assembly="SD.LLBLGen.Pro.ORMSupportClasses.NET20" Namespace="SD.LLBLGen.Pro.ORMSupportClasses" TagPrefix="llblgenpro" %> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

<html xmlns="http://www.w3.org/1999/xhtml" > 
<head runat="server"> 
    <title></title> 
</head> 
<body> 
    <form id="form1" runat="server"> 
    <div> 
     <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox> 
     <asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="Button" /> 
     <br /> 
     <br /> 
    <asp:GridView ID="CustomersGridView" runat="server" DataSourceID="dsCustomers"> 
    </asp:GridView> 
    </div> 
    <llblgenpro:LLBLGenProDataSource ID="dsCustomers" runat="server" 
     DataContainerType="EntityCollection" 
     EntityCollectionTypeName="TestWebApp1Framework.CollectionClasses.CustomerCollection, TestWebApp1Framework"> 
    </llblgenpro:LLBLGenProDataSource> 
    </form> 
</body> 
</html> 

Default.aspx.cs:

using System; 
using SD.LLBLGen.Pro.ORMSupportClasses; 
using TestWebApp1Framework.HelperClasses; 

namespace TestWebApp1 
{ 
    public partial class _Default : System.Web.UI.Page 
    { 
     protected void Button1_Click(object sender, EventArgs e) 
     { 
      var filter = new PredicateExpression(); 
      filter.Add(new FieldLikePredicate(CustomerFields.FirstName, null, TextBox1.Text.Trim() + "%")); 
      filter.AddWithOr(new FieldLikePredicate(CustomerFields.LastName, null, TextBox1.Text.Trim() + "%")); 
      dsCustomers.FilterToUse = filter; 
      dsCustomers.DataBind(); 
      CustomersGridView.DataBind(); 
     } 
    } 
} 

Résultats des tests: Loading cette page d'abord tous les clients. Entrez la lettre A dans la zone de texte et cliquez sur le bouton affiche une liste de tous les clients dont le prénom ou le nom commence par A. Cela montre que les deux filtres fonctionnent correctement.

+0

Mise à jour de la question pour inclure le fait que le code est dans un événement Button.Click et qu'il n'y a rien dans la méthode Page.Load. – JamesEggers

+0

Hmm, juste effacé tout mon cache et nettoyé la construction et essayé encore et il semble fonctionner maintenant. Bizarre. Merci pour la réponse et les informations de test! – JamesEggers

Questions connexes