ObjectDataSource FilterExpression不使用多个参数

时间:2012-01-09 20:26:07

标签: c# asp.net objectdatasource

我有一个绑定到GridView的ObjectDataSource就好了。

我还有两个调用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;
}

1 个答案:

答案 0 :(得分:2)

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

但是,您可以尝试使用以下代码来查看它是否可以解决您的问题(它将为您节省一些代码并使其更易于理解和维护):

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;
    }
}