2013-09-28 2 views
1

objectdatasource에 바인딩 된 gridview가 있습니다. 페이징이 있으며 정상적으로 작동합니다. 이제는 페이지에 검색 상자가 있습니다. 누군가 검색 버튼을 클릭하면 startRow 매개 변수를 0으로 재설정하려고하지만 작동하지 않습니다. 현재 페이지가 데이터 소스의 Select 메서드에 전달됩니다. 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를의 get 메소드는 그가 searchbutton을 클릭 한 순간에 어떤 페이지 사용자이었다 호출합니다.

답변

1

OnSelecting 이벤트의 StartRowIndex 매개 변수를 ObjectDataSource으로 재설정 할 수 있습니다.

SearchButton을 클릭하면 objectDataSource가 행 0으로 시작해야하므로 다시 게시가 발생한 컨트롤을 식별해야하며, 검색 단추 인 경우 StartRowIndex 매개 변수를 다시 설정해야합니다. 3 단계 아래

가 수행해야합니다. 검색 버튼을

를 클릭 한 경우

1.) 확인 A) 내가 컨트롤에게 특히 버튼을 얻는 방법에 대한 this blog를 참조하는 것이 좋습니다 것, 그 발생 다시 게시.

기본적으로 아이디어는 HiddenField을 사용하고 검색 버튼을 클릭 할 때마다이 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" /> 

, 당신의 .aspx 마크 업

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

코드의 <head> 태그에 아래의 스크립트를 포함 뒤에 :: ObjectDataSource를 시작 행 값을 재설정에 전부

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

때 검색 버튼이 클릭됩니다.