2010-08-01 243 views
0

我有一个asp.net c#网站,我正在用Visual Web Developer Express Edition 2010进行开发。在这个网站中,我有一个FilterExpression,它应该过滤三个标准:开始日期,结束日期和关键字搜索。FilterExpression问题 - 多个条件

我能够获得自己开始和结束日期过滤器的工作,并且关键字搜索也是独立工作的。我遇到的麻烦是让所有三个人一起工作。

我使用(见下文)的代码在默认情况下(良好)显示所有记录,确实想筛选时,以下几点:

  • 搜索关键字:所有记录
  • 搜索关键字以及日期范围:没有记录
  • 只是日期范围:所有记录

下面的代码我现在有,它会尝试所有这三个整合,但不起作用。任何意见将是有益的:

<asp:SqlDataSource ID="SqlDataSource1" runat="server" 
ConnectionString="<%$ ConnectionStrings:sermonConnectionString %>" 
SelectCommand="SELECT ID, sermon_date, sermon_speakerfirst + ' ' + sermon_speakerlast AS Speaker, sermon_title, sermon_subtitle, sermon_notes FROM what ORDER BY sermon_date DESC" 
FilterExpression="([sermon_title] LIKE '%{0}%') AND ([sermon_date] >= '{1}' AND [sermon_date] <= '{2}')"> 
<FilterParameters> 
    <asp:ControlParameter ControlID="TextBox2" PropertyName="Text" Type="DateTime" ConvertEmptyStringToNull="true" /> 
    <asp:ControlParameter ControlID="TextBox3" PropertyName="Text" Type="DateTime" ConvertEmptyStringToNull="true"/> 
    <asp:ControlParameter ControlID="SermonSearch" PropertyName="Text" Type="String"/> 
</FilterParameters> 
</asp:SqlDataSource> 
+1

请保持像“Asp.net C#”标记出你的标题 - 只使用标签这一点。 – 2010-08-03 19:18:44

回答

0

想我要指出,我打破了日期/时间过滤器和关键字过滤器分成两个区域搜索“解决”这个问题。由于记录集不是那么大,因此没有真正的理由能够在此特定实例中通过日期和关键字进行过滤。

0

请参阅样本得到了日期范围过滤器的动态内容列表

public virtual IQueryable<DynamicContent> GetBusinessItemsByExpiryDate(DateTime theDate, int thisPageNo, ref int? totalCount) 
    { 
     //ToDo: Use FilterExperssion for filtering rather than above; 
     int? itemsToSkip = 0; 
     int? itemsPerPage = ItemsPerPageCount; 

     string towncity = string.Empty; string strSectorID = string.Empty; 
     //Guid sectorID; 
     if (pageNo > 0) 
     { 
      itemsToSkip = itemsPerPage * (pageNo - 1); 
     } 
     DynamicModuleManager dynamicModuleManager = DynamicModuleManager.GetManager(); 
     Type businessItemType = TypeResolutionService.ResolveType("Telerik.Sitefinity.DynamicTypes.Model.Businesslisting.BusinessItem"); 
     var query = dynamicModuleManager.GetDataItems(businessItemType); 
     System.Globalization.CultureInfo culture = null; 
     culture = System.Globalization.CultureInfo.CurrentUICulture; 
     FilterExpression = ContentHelper.AdaptMultilingualFilterExpressionRaw(FilterExpression, culture); 
     string filterExpression = DefinitionsHelper.GetFilterExpression(FilterExpression, AdditionalFilter); 
     filterExpression += "Visible = true AND Status = Live"; 
     if (theDate != DateTime.MinValue) 
     { 
      filterExpression += string.Format(" And ExpiryDate >= ({0}) AND ExpiryDate <= ({1})", theDate.AddDays(-14).ToString("yyyy/MM/dd"), theDate.AddDays(42).ToString("yyyy/MM/dd")); 
     } 
     SortExpression += "Title"; 
     query = DataProviderBase.SetExpressions<DynamicContent>(query, filterExpression, SortExpression, itemsToSkip, new int?(itemsPerPage ?? 0), ref totalCount); 
     TotalItemCount = (int)totalCount; 
     return query; 
    }