2016-06-13 1 views
0

私はグリッドビューで初めてページすることができますが、2番目のページをクリックしようとすると何も起こりません。私はそれがOnTextChangedイベントがチャームのように動作する私のgridview内で発生した後、次のテキストボックスにタブするために使用されるJQueryスクリプトと関係していることを特定することができました。まず、ここに関連するコードされていますJQueryスクリプトGridview Pagingが2回以上発砲するのを防ぐ

protected void Page_Load(object sender, EventArgs e) 
{   
    if (!IsPostBack) 
    { 
     BindDetails(); 
    } 
} 

private void BindDetails() 
{   
    string strSQL = "SELECT * FROM TABLE"; 
    SqlDetailList.SelectCommand = strSQL; 
    gvDetailList.DataSource = SqlDetailList; 
    gvDetailList.DataBind(); 
} 

protected void gvDetailList_PageIndexChanging(object sender, GridViewPageEventArgs e) 
{   
    gvDetailList.PageIndex = e.NewPageIndex; 
    BindDetails(); 
} 

私はスクリプトを削除する場合は、ページングが正常に動作します:

<asp:ScriptManager ID="ScriptManagerDetails" runat="server" ScriptMode="Release"></asp:ScriptManager> 
     <script type="text/javascript"> 
      var g_CurrentTextBox;     
      Sys.Application.add_load(applicationLoadHandler); 
      function applicationLoadHandler() { 
       Sys.WebForms.PageRequestManager.getInstance().add_endRequest(endRequestHandler); 
      } 

      function endRequestHandler() { 

       $get(g_CurrentTextBox).focus(); 
       $get(g_CurrentTextBox).select(); 
      } 


      function onTextFocus() { 
       g_CurrentTextBox = event.srcElement.id; 
      }     
     </script> 
     <asp:UpdatePanel ID="UpdatePanelDetails" runat="server"> 
      <ContentTemplate> 
      <div class="row" id="ItemResults"> 
      <asp:GridView ID="gvDetailList" runat="server" CssClass="table table-striped table-bordered table-hover" 
       AutoGenerateColumns="false" AllowPaging="true" OnPageIndexChanging="gvDetailList_PageIndexChanging" OnRowDataBound="gvDetailList_RowDataBound" Pagesize="25" > 
       <Columns> 
        <asp:BoundField DataField="ItemNumber" HeaderText ="Item Number" SortExpression="ItemNumber" /> 
        <asp:TemplateField HeaderText="Qty" SortExpression="QUANTITY"> 
         <ItemTemplate> 
          <asp:Label ID="lblGVQuantity" runat="server" Text='<%#Eval("QUANTITY") %>'></asp:Label> 
          <asp:Panel ID="pnlQuantity" runat="server"> 
           <asp:TextBox ID="txtQuantity" runat="server" class="form-control input-sm" 
             AutoPostBack="true" Text='<%#Eval("QUANTITY") %>' OnTextChanged="txtQuantity_TextChanged"></asp:TextBox> 
           <asp:CompareValidator ID="cvQuantity" runat="server" ControlToValidate="txtQuantity" Type="Integer" ForeColor="Red" 
           Operator="DataTypeCheck" ErrorMessage="Quantity is not numeric" Text="* Quantity is not numeric" Display="Dynamic" ValidationGroup="valAdd" /> 
          </asp:Panel> 
         </ItemTemplate> 
        </asp:TemplateField> 
       </Columns> 
       <PagerStyle CssClass="pagination-ys" /> 
      </asp:GridView> 
      <asp:SqlDataSource ID="SqlDetailList" runat="server" 
      ConnectionString="<%$ ConnectionStrings:MyConnectionStr%>"      
      > 
     </asp:SqlDataSource> 
     </div> 
     </ContentTemplate> 
    </asp:UpdatePanel> 

ここでは、背後にあるコードです。しかし、私は言いましたが、スクリプトは残っていますが、これは最初の動作のみですが、それ以降のページでは動作しません。

+0

は、コンソール内のJavaScriptの例外はありますか? –

+0

私はそう信じない。私はどんな誤りも見ていない。 – shiftingviews

+0

私はみんなを困らせましたか?ハハ。しかし、すべての真剣さの中で、どんな助けも感謝するでしょう。 – shiftingviews

答えて

0

オクラホマ私は今変更を加えた後に動作していると思います。最初に、現在のTextboxがnullかどうか、およびgridviewのカウントがページリクエストの前と同じかどうかを調べることによって、JQueryスクリプトにいくつかの変更を加えました。これは、何らかの理由で私がページの5行目にいて、次のページに4行しかない場合、ページの5行目にフォーカスを置くようになり、例外が発生するからです。

コードの背後には、Page_LoadイベントとPageIndexChangedイベントの最初の行(ここでは追加したもの)にフォーカスを置くだけです。

HTML:背後に

<asp:ScriptManager ID="ScriptManagerDetails" runat="server" ScriptMode="Release"></asp:ScriptManager> 
    <script type="text/javascript"> 
     var rowscountbefore; 
     var g_CurrentTextBox;     
     Sys.Application.add_load(applicationLoadHandler); 
     function applicationLoadHandler() { 
      Sys.WebForms.PageRequestManager.getInstance().add_endRequest(endRequestHandler); 
     } 

     function beginRequestHandler() { 
     rowscountbefore = $("#<%=gvDetailList.ClientID%> tr").length; 
     } 

     function endRequestHandler() { 
     if (g_CurrentTextBox != null && rowscountbefore == $("#<%=gvDetailList.ClientID%> tr").length) { 
      $get(g_CurrentTextBox).focus(); 
      $get(g_CurrentTextBox).select(); 
      } 
     } 

     function onTextFocus() { 
      g_CurrentTextBox = event.srcElement.id; 
     }     
    </script> 
    <asp:UpdatePanel ID="UpdatePanelDetails" runat="server"> 
     <ContentTemplate> 
     <div class="row" id="ItemResults"> 
     <asp:GridView ID="gvDetailList" runat="server" CssClass="table table-striped table-bordered table-hover" OnPageIndexChanged="gvDetailList_PageIndexChanged" 
      AutoGenerateColumns="false" AllowPaging="true" OnPageIndexChanging="gvDetailList_PageIndexChanging" OnRowDataBound="gvDetailList_RowDataBound" Pagesize="25" > 
      <Columns> 
       <asp:BoundField DataField="ItemNumber" HeaderText ="Item Number" SortExpression="ItemNumber" /> 
       <asp:TemplateField HeaderText="Qty" SortExpression="QUANTITY"> 
        <ItemTemplate> 
         <asp:Label ID="lblGVQuantity" runat="server" Text='<%#Eval("QUANTITY") %>'></asp:Label> 
         <asp:Panel ID="pnlQuantity" runat="server"> 
          <asp:TextBox ID="txtQuantity" runat="server" class="form-control input-sm" 
            AutoPostBack="true" Text='<%#Eval("QUANTITY") %>' OnTextChanged="txtQuantity_TextChanged"></asp:TextBox> 
          <asp:CompareValidator ID="cvQuantity" runat="server" ControlToValidate="txtQuantity" Type="Integer" ForeColor="Red" 
          Operator="DataTypeCheck" ErrorMessage="Quantity is not numeric" Text="* Quantity is not numeric" Display="Dynamic" ValidationGroup="valAdd" /> 
         </asp:Panel> 
        </ItemTemplate> 
       </asp:TemplateField> 
      </Columns> 
      <PagerStyle CssClass="pagination-ys" /> 
     </asp:GridView> 
     <asp:SqlDataSource ID="SqlDetailList" runat="server" 
     ConnectionString="<%$ ConnectionStrings:MyConnectionStr%>"      
     > 
    </asp:SqlDataSource> 
    </div> 
    </ContentTemplate> 
</asp:UpdatePanel> 

コード:

protected void Page_Load(object sender, EventArgs e) 
{   
    if (!IsPostBack) 
    { 
     BindDetails(); 
     TextBox txtQuantity = (TextBox)gvDetailList.Rows[0].Cells[4].FindControl("txtQuantity"); 
     txtQuantity.Focus(); 
    } 
} 

private void BindDetails() 
{   
    string strSQL = "SELECT * FROM TABLE"; 
    SqlDetailList.SelectCommand = strSQL; 
    gvDetailList.DataSource = SqlDetailList; 
    gvDetailList.DataBind(); 
} 

protected void gvDetailList_PageIndexChanging(object sender, GridViewPageEventArgs e) 
{   
    gvDetailList.PageIndex = e.NewPageIndex; 
    BindDetails(); 
} 

protected void gvDetailList_PageIndexChanged(object sender, EventArgs e) 
{ 
    TextBox txtQuantity = (TextBox)gvDetailList.Rows[0].Cells[4].FindControl("txtQuantity"); 
    txtQuantity.Focus(); 
} 
関連する問題