2009-03-25 8 views
0

Ich habe folgende (Probe) Code Suchergebnisse aus einer LLBLGen Datenquelle zu filtern:Können mehrere Filter in einer Datenquelle verwendet werden?

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

Dies funktioniert gut und filtert die Ergebnisse, wenn ich diesen Code auslösen. Wenn ich jedoch einen zweiten Filter hinzufüge, muss ich den Code zweimal drücken, bevor ich Ergebnisse sehe. Unten ist ein Ausschnitt mit 2 Filtern:

Das Problem ist in Ordnung für jede Suche nach dem ersten; Ich brauche es jedoch, um an der ersten zu arbeiten.

UPDATE: Der Code befindet sich in einem ASP.Net Button Click-Ereignis. Es gibt keinen Code im Seitenladeereignisblock, der diese Datenquelle ebenfalls betrifft.

Irgendwelche Ideen?

Antwort

0

Ich kann das Verhalten, das Sie in einem einfachen Testfall sehen, nicht duplizieren (siehe unten). Wenn Sie keine Parameterbindung für die Datenquelle verwenden, sollten Sie DataBind nicht nur für das DataSource-Steuerelement, sondern nur für die GridView aufrufen müssen.


Testfall:

DB enthält 1 Tabelle Kunden mit zwei varchar (50) Felder: Vorname und Nachname.

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(); 
     } 
    } 
} 

Testergebnisse: Laden dieser Seite zeigt zunächst alle Kunden. Wenn Sie den Buchstaben A in das Textfeld eingeben und auf die Schaltfläche klicken, wird eine Liste aller Kunden angezeigt, deren Vorname oder Nachname mit A beginnt. Dies zeigt, dass beide Filter ordnungsgemäß funktionieren.

+0

Die Frage wurde aktualisiert, um die Tatsache einzubeziehen, dass sich der Code in einem Button.Click-Ereignis befindet und die Page.Load-Methode nichts enthält. – JamesEggers

+0

Hmm, habe gerade meinen gesamten Cache geleert und den Build geputzt und es erneut versucht und es scheint jetzt zu funktionieren. Seltsam. Danke für die Antwort und die Testinformationen! – JamesEggers

Verwandte Themen