2013-09-28 8 views
1

J'ai un gridview lié à un objectdatasource. Il y a la pagination et ça marche bien. Maintenant, il ya aussi une boîte de recherche sur la page, et si quelqu'un clique sur le bouton de recherche je veux réinitialiser le paramètre startRow à 0, mais cela ne fonctionne pas: la page en cours est passée à la méthode Select de la source de données.Comment réinitialiser la valeur du paramètre 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> 

et dans le codebehind j'essaie de faire:

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

mais la méthode get du ObjectDataSource est appelé avec tout ce que l'utilisateur page a été au moment où il a cliqué sur le searchbutton.

Répondre

1

Vous pouvez réinitialiser le paramètre StartRowIndex dans l'événement OnSelecting de ObjectDataSource. De plus, puisque vous devez cliquer sur le bouton SearchButton, objectDataSource doit commencer par la ligne 0, vous devez donc identifier le contrôle qui a causé la publication, et si c'est votre bouton de recherche, réinitialisez le paramètre StartRowIndex.

Ci-dessous 3 étapes doivent être effectuées.

1.) Déterminer si le bouton de recherche a été cliqué

a) Je vous recommande de voir this blog quant à la façon d'obtenir le contrôle notamment un bouton, qui a causé publication

Fondamentalement, l'idée est d'utiliser un HiddenField et de définir cette valeur hiddenField à notre nom de contrôle de bouton de recherche, chaque fois que le bouton de recherche est cliqué.

Nous utilisons ensuite une variable globale nommée controlName pour définir la valeur du champ masqué dans l'événement Page_Load.

2.) Gérer l'événement OnSelecting de ObjectDataSource. 3.) définir un événement OnClientClick pour votre bouton Rechercher. Pourquoi cet événement est utilisé est parce que, lorsque le bouton de recherche est cliqué, nous allons définir la valeur HiddenField à l'ID de notre 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" /> 

En outre, inclure le script ci-dessous dans <head> balise de votre .aspx balisage

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

code derrière ::

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;     
      } 
     } 
    } 
} 

C'est tout à remettre à zéro la valeur de la ligne de départ de ObjectDataSource, lorsque votre bouton de recherche est cliqué.

Questions connexes