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;
}
}
这真是奇怪...其实相同的结果....但我做了更多的测试,我得到了不一致的结果....有时我得到了一些结果,有时不是!我的分页说,我应用过滤器后有超过10页,但当我点击第3页时,它说“没有结果”。 – capdragon 2012-01-09 21:57:49
所以我真的不知道该问什么。但我会给你答案,因为至少它帮助我测试。 – capdragon 2012-01-09 21:58:30