我有以下(示例)代码来过滤来自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事件中。页面加载事件块中没有任何代码影响此数据源。
有什么想法吗?
答案 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开头的所有客户的列表。这表明两个过滤器都正常工作。