2009-03-25 10 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番目のフィルタを追加すると、結果が表示される前にコードを2回呼び出す必要があります。以下は、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(); 

最初の1つ後の検索で問題はありません。しかし、私はそれが最初のもので動作する必要があります。

更新: コードはASP.Net Button 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

関連する問題