可以在llblgen数据源上使用多个过滤器吗?

时间:2009-03-25 15:04:22

标签: asp.net llblgenpro

我有以下(示例)代码来过滤来自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 Button Click事件中。页面加载事件块中没有任何代码影响此数据源。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

我无法在简单的测试用例中复制您所看到的行为(请参阅下文)。此外,除非您在数据源上使用参数绑定,否则您不必在DataSource控件上调用DataBind,而只需在GridView上调用。


测试用例:

DB包含1个表Customer,其中包含两个varchar(50)字段:FirstName和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();
        }
    }
}

测试结果: 最初加载此页面会显示所有客户。在文本框中输入字母A并单击按钮会显示名字或姓氏以A开头的所有客户的列表。这表明两个过滤器都正常工作。