ObjectDataSource FilterExpression не работает с несколькими параметрами - PullRequest
0 голосов
/ 10 января 2012

У меня есть ObjectDataSource, который отлично связывается с моим GridView.

У меня также есть два раскрывающихся списка, которые вызывают функцию 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 Ответ

2 голосов
/ 10 января 2012

Это может быть связано с обновлением выражения фильтра, но я сомневаюсь, что это так.

Однако вы можете попробовать следующий код, чтобы увидеть, решит ли он вашу проблему (он сэкономит вам немного кода и облегчит понимание и обслуживание):

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