2013-09-28 1 views
1

У меня есть gridview, связанный с объектным источником данных. Существует пейджинг, и он работает нормально. Теперь на странице есть также поисковый запрос, и если кто-то нажимает кнопку поиска, я хочу сбросить параметр startRow до 0, но он не работает: текущая страница передается методу выбора источника данных.Как сбросить значение параметра ASP.NET ObjectdataSource

 <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 вызывается с любой страницы пользователь был в тот момент, когда он нажал кнопку Поиск.

ответ

1

Вы можете сбросить параметр StartRowIndex в событии OnSelectingObjectDataSource.

Кроме того, поскольку вы требуете, чтобы при нажатии кнопки SearchButton объект objectDataSource должен начинаться с строки 0, поэтому вам нужно определить, какой элемент управления вызвал обратную передачу, и если это ваша кнопка поиска, сбросьте параметр StartRowIndex.

Ниже 3 шага должны быть выполнены:.

1.) Определить, если кнопка поиска была нажата

а) Я буду рекомендовать, чтобы увидеть this blog о том, как получить элементу управления особенно кнопки, что вызвало постбэк.

Основная идея состоит в том, чтобы использовать HiddenField и установить это значение hiddenField для нашего управляющего имени кнопки поиска, всякий раз, когда нажимается кнопка поиска.

Затем мы используем глобальную переменную с именем say controlName, чтобы установить значение из скрытого поля в событии Page_Load.

2.) Обрабатывать OnSelecting событие ObjectDataSource.

3.) Определите событие OnClientClick для вашей кнопки поиска. Почему это событие используется, потому что при нажатии кнопки поиска мы установим значение HiddenField в ID нашего SearchButton.

<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, когда это нажата кнопка поиска.