我有一个绑定到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;
}
答案 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;
}
}