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.) 検索ボタンがクリックされたかどうかを識別する

this bloga.)ポストバックの原因となったコントロール、特にボタンを取得する方法を確認することをお勧めします。

基本的なアイデアは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" />

また、マークアップ<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 に答える