以编程方式更新FilterParameter值?

时间:2013-12-05 10:37:17

标签: c# asp.net sqldatasource

如何更新过滤表达式&的SQLDataSource的过滤器参数值? filter参数是否已在aspx中定义?我正在尝试添加alpha分页器。

背后的代码

protected void rptFilterUI_ItemCommand(object source, RepeaterCommandEventArgs e)
{
    if (e.CommandName == "All")
    {
        ClearFilter();
    }
    else
    {
        userSource.FilterParameters.Clear();
        userSource.FilterParameters[0].DefaultValue = "LOGINID";
        userSource.FilterParameters[1].DefaultValue = e.CommandName;
        userSource.DataBind();
    }
}

ASPX

<asp:SqlDataSource ID="userSource" runat="server" ProviderName="System.Data.OleDb"
    ConnectionString="<%$ connectionstrings:testApp%>" SelectCommand="select * from foo"
    FilterExpression="CONVERT({0},'System.String') like '{1}%'" EnableCaching="false">
    <FilterParameters>
        <asp:ControlParameter Name="test2" ControlID="SearchByDropDownList" PropertyName="SelectedValue" />
        <asp:ControlParameter Name="test" ControlID="SearchTextBox" PropertyName="text" />
    </FilterParameters>
</asp:SqlDataSource>

它会使索引超出范围

  

指数超出范围。必须是非负数且小于集合的大小。   参数名称:index

1 个答案:

答案 0 :(得分:0)

FilterParameters是一个集合。因此这句话......

userSource.FilterParameters.Clear()

...将截断过滤器参数列表。因此,如果您尝试引用空集合的成员,您将获得超出范围异常的索引。

在.Clear()之后立即尝试...,放置以下代码..

userSource.FilterParameters.Add(new ControlParameter("test2", "SearchByDropDownList", "SelectedValue"));            
userSource.FilterParameters.Add(new ControlParameter("test", "SearchTextBox", "Value"));