1

我有一个绑定到对象数据源的网格视图。有分页,它工作正常。现在页面上还有一个搜索框,如果有人点击搜索按钮我想将startRow参数重置为0,但是不起作用:当前页面传递给数据源的Select方法。

       <asp:GridView runat="server" ID="gvCars" 
        AutoGenerateColumns="false" 
        DataKeyNames="Id"            
        AllowPaging="true" AllowSorting="true"
        PageSize="2" DataSourceID="dataSource"           
        OnDataBound="GridView_DataBound" OnRowCommand="gvCars_RowCommand" OnRowDataBound="gvCars_RowDataBound">               

       <Columns>
        ... 
       </Columns>             

    </asp:GridView>
    <asp:ObjectDataSource ID="dataSource" EnablePaging="true" runat="server" 
        SelectCountMethod="GetCount" 
        MaximumRowsParameterName="PageSize" 
        StartRowIndexParameterName="StartRow" SortParameterName="SortExpression"
        SelectMethod="Get" 
        TypeName="DataSource">

        <SelectParameters>
            <asp:Parameter Name="startRow" />  
            <asp:Parameter Name="pageSize" />
            <asp:Parameter Name="sortExpression" />                  
            <asp:ControlParameter Name="searchTerm" ControlID="txtSearchTerm" PropertyName="Text" />
        </SelectParameters>
    </asp:ObjectDataSource>

在代码隐藏中我尝试做:

protected void btnSearch_Click(object sender, EventArgs e)
    {
        dataSource.SelectParameters["startRow"].DefaultValue = "0";
        gvCars.DataBind();
    }

但是无论用户在单击搜索按钮时所处的页面,都会调用 objectdatasource 的 get 方法。

4

1 回答 1

1

您可以在 的情况下重新设置StartRowIndex参数。OnSelectingObjectDataSource

此外,由于您要求,当单击 SearchButton 时,objectDataSource 应从第 0 行开始,因此您需要确定哪个控件导致回发,如果那是您的搜索按钮,请重置StartRowIndex参数。

应执行以下 3 个步骤:

1.) 确定是否点击了搜索按钮

a.) 我会建议查看this blog如何获取控件,尤其是按钮,这会导致回发。

基本上想法是使用 aHiddenField并将这个 hiddenField 值设置为我们的搜索按钮控件名称,每当单击搜索按钮时。

然后我们使用一个名为 say 的全局变量controlName来设置 Page_Load 事件中隐藏字段的值。

2.) 处理 的OnSelecting事件ObjectDataSource

3.)OnClientClick为您的搜索按钮定义一个事件。之所以使用这个事件是因为,当点击搜索按钮时,我们会将 HiddenField 值设置为 SearchButton 的 ID。

<asp:ObjectDataSource ID="dataSource"
     OnSelecting="dataSource_Selecting" ... />
 <asp:Button ID="btnSearch" runat="server"
      OnClick="btnSearch_Click"  
      OnClientClick = "SetSource(this.id)"/>
 <asp:HiddenField ID="hidSourceID" runat="server" />

<head>此外,在标记的.aspx标记中包含以下脚本

<script type = "text/javascript">
    function SetSource(SourceID) {
        var hidSourceID =
        document.getElementById("<%=hidSourceID.ClientID%>");
        hidSourceID.value = SourceID;
    }
</script>

后面的代码::

public partial class Default: System.Web.UI.Page
{
    string controlName = string.Empty;

     // Page Load event
      protected void Page_Load(object sender, EventArgs e)
        {
            if (Request.Form[hidSourceID.UniqueID] != null &&    
                Request.Form[hidSourceID.UniqueID] != string.Empty)
                 {
                    controlName = Request.Form[hidSourceID.UniqueID];
                 }
         }

  // OnSelecting event of ObjectDataSource
      protected void dataSource_Selecting(object sender, 
                                          ObjectDataSourceSelectingEventArgs e)
     {
        // here controlName is a variable set in Page_Load event
         if (controlName != null)
         {
             // check if your search button was clicked
             if (controlName.Equals("btnSearch"))
             {
                 // reset the startRowIndex to zero
                 // note that e.Arguments will work
                 // e.InputParameters will not work
                 e.Arguments.StartRowIndex = 0;                 
             }
         }
     }
}

这就是在单击搜索按钮时重置 ObjectDataSource 的起始行值的全部内容。

于 2013-09-29T09:49:22.330 回答