2009-03-25 3 views
0

내가 LLBLGen 데이터 소스에서 검색 결과를 필터링하려면 다음 (샘플) 코드를 가지고 : 이것은 잘 작동하고이 코드를 실행할 때 결과를 필터링llblgen 데이터 소스에 여러 필터를 사용할 수 있습니까?

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

. 그러나 두 번째 필터를 추가하면 결과를보기 전에 코드를 두 번 눌러야합니다. 다음은 2 개의 필터가있는 스 니펫입니다.

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

첫 번째 검색 이후에는 모든 검색에 문제가 없습니다. 그러나 첫 번째 작업을 수행해야합니다.

업데이트 : 코드는 ASP.Net 단추 Click 이벤트에 있습니다. 이 데이터 소스에 영향을주는 코드가 페이지로드 이벤트 블록에 없습니다.

아이디어가 있으십니까?

답변

0

간단한 테스트 케이스 (아래 참조)에서 보이는 동작을 복제 할 수 없습니다. 또한 데이터 소스에서 매개 변수 바인딩을 사용하지 않는 경우 DataSource 컨트롤에서 DataBind를 호출 할 필요는 없으며 GridView에서만 호출해야합니다.


테스트 케이스 : 이름 및 성 :

DB 두 VARCHAR (50) 필드 1 개 테이블 고객이 포함되어 있습니다.

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

테스트 결과 : 로드이 페이지는 처음에 모든 고객을 보여줍니다. 텍스트 상자에 문자 A를 입력하고 버튼을 클릭하면 이름이 A로 시작하는 모든 고객의 목록이 표시됩니다. 이는 두 필터가 모두 올바르게 작동하고 있음을 나타냅니다.

+0

코드가 Button.Click 이벤트에 있고 Page.Load 메서드에 아무 것도 없다는 사실을 포함하도록 질문이 업데이트되었습니다. – JamesEggers

+0

흠, 그냥 내 캐시를 모두 지우고 빌드를 청소하고 다시 시도 했으므로 이제 작동하는 것 같습니다. 기묘한. 답변과 테스트 정보를 보내 주셔서 감사합니다! – JamesEggers