ObjectDataSource FilterExpression不能使用多个参数

问题描述:

我有一个ObjectDataSource绑定到我的GridView就好了。ObjectDataSource FilterExpression不能使用多个参数

我也有两个下拉列表框来调用ApplyFilterExpression函数。

他们都独立工作,但是当我设置两个下拉列表中的值我没有结果。但我知道应该有结果。我在这里做错了什么?

<asp:ObjectDataSource ID="dsLogs" runat="server" SelectMethod="GetDTAll" 
    TypeName="LogManager.LogRepository" 
    SelectCountMethod="GetAllCount" > 
    <SelectParameters> 
     <asp:Parameter DefaultValue="DESC" Name="sortOrder" Type="String" /> 
     <asp:Parameter DefaultValue="timestamp" Name="orderBy" Type="String" /> 
     <asp:Parameter DefaultValue="1" Name="startRowIndex" Type="Int32" /> 
     <asp:Parameter DefaultValue="1000" Name="maximumRows" Type="Int32" /> 
    </SelectParameters> 
</asp:ObjectDataSource> 

private void ApplyFilterExpression() 
{ 
    dsLogs.FilterExpression = null; 
    bool hasFilter = false; 

    if (ddlTypes.SelectedIndex != 0) 
    { 
     dsLogs.FilterExpression = "type='" + ddlTypes.SelectedValue + "'"; 
     hasFilter = true; 
    } 

    if (ddlUsers.SelectedIndex != 0) 
    { 
     if (hasFilter) 
     { 
      dsLogs.FilterExpression += " AND username='" + ddlUsers.SelectedValue + "'"; 
     } 
     else 
     { 
      dsLogs.FilterExpression = "username='" + ddlUsers.SelectedValue + "'"; 
      hasFilter = true; 
     } 
    } 
    ViewState["FiltExp"] = (string)dsLogs.FilterExpression; 
} 

它可能与更新过滤器表达式有关,但我怀疑是这种情况。

但是,你可以试试下面的代码,看看它是否解决您的问题(它会为你节省一些代码,使其更易于理解和维护):

private void ApplyFilterExpression() 
{ 
    var sbFilter = new System.Text.StringBuilder(200); 

    if (ddlTypes.SelectedIndex != 0) 
    { 
     sbFilter.Append("type='").Append(ddlTypes.SelectedValue).Append("'"); 
    } 

    if (ddlUsers.SelectedIndex != 0) 
    { 
     if (sbFilter.Length != 0) 
     { 
      sbFilter.Append(" AND "); 
     } 
     sbFilter.Append("username='").Append(ddlUsers.SelectedValue).Append("'"); 
    } 
    if (sbFilter.Length != 0) 
    { 
     dsLogs.FilterExpression = sbFilter.ToString(); 
    } else 
    { 
     dsLogs.FilterExpression = null; 
    } 
} 
+0

这真是奇怪...其实相同的结果....但我做了更多的测试,我得到了不一致的结果....有时我得到了一些结果,有时不是!我的分页说,我应用过滤器后有超过10页,但当我点击第3页时,它说“没有结果”。 – capdragon 2012-01-09 21:57:49

+0

所以我真的不知道该问什么。但我会给你答案,因为至少它帮助我测试。 – capdragon 2012-01-09 21:58:30