2012-08-02 94 views
1

我有一個用戶控件,它有兩個下拉列表,四個文本框和一個gridview。按Tab鍵時,我希望焦點按此順序移動。GridView銷燬標籤訂單

我有序列(1005,1010,1015 ...)中的每個控件集的tabindex屬性,但其tabindex屬性未設置爲任何內容的gridview除外。

在page_load我將焦點設置爲第一個下拉列表。

加載頁面時,根據需要將焦點放在第一個下拉列表上。然後當按下標籤時,焦點會根據需要移動到下一個下拉列表。問題是,在這個階段按下標籤時,現在不是移動到第一個文本框(tabindex設置爲1015),焦點移動到了gridview上。請注意,gridview沒有將其tabindex設置爲任何值。當現在按下標籤時,焦點會移動到頁面上的其他用戶控件上,即完全不在所討論的用戶控件中。然後,幾個按鍵後,用戶控件返回到用戶控件,然後按照所需順序移動,即第一個下拉列表,第二個下拉列表,第一個文本框,第二個文本框,第三個文本框,第四個文本框。在此之後,它完全跳過gridview並移動到主頁面上的控件。

因此,當頁面加載時,標籤的移動順序與標籤週期完成後的順序不同,也就是說,所有控件都是專注的。

如果我通過使用鼠標單擊將焦點移動到第一個文本框,然後按Tab,然後焦點根據需要移動到第二個文本框,然後根據需要移動到第三個文本框,然後根據需要移動到第四個文本框。

我在頁面中使用了兩個用戶控件,其中之一是上面討論的,再加上一個控件直接在頁面上。母版頁中也有一些控件。

當按Tab鍵時,不會發生服務器或客戶端事件處理。

我試過用asp.net textbox控件替換html輸入控件,但問題依然存在。

請求:請選擇一個簡單的解決方案,即不需要在代碼隱藏中手動設置tabindex的原因,因爲這不是很有伸縮性。

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="GridExpense.ascx.cs" Inherits="StationaryManagementSystem.GridExpense" %> 

<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="asp" %> 

<script type="text/javascript"> 
    function MinQuantity_Blurred() 
    { 
     $('#' + '<%= hitMaxQuantitySearch.ClientID %>')[0].value = $('#' + '<%= hitMinQuantitySearch.ClientID %>')[0].value; 
    } 

    function FromDated_Blurred() 
    { 
     $('#' + '<%= txtToDatedSearch.ClientID %>')[0].value = $('#' + '<%= txtFromDatedSearch.ClientID %>')[0].value; 
    } 
</script> 

<asp:Panel ID="panel" runat="server"> 
    <table> 
     <tr> 
      <td> 
       <table width="800px"> 
        <tr align="right"> 
         <td class="columnOne"> 
          Item : 
         </td> 
         <td class="columnTwo"> 
          <asp:DropDownList ID="ddlItemSearch" runat="server" EnableViewState="true" DataValueField="Id" DataTextField="Name" TabIndex="1005" Width="200px" /> 
         </td> 

         <td class="columnOne"> 
          Officer : 
         </td> 
         <td class="columnTwo"> 
          <asp:DropDownList ID="ddlOfficerSearch" runat="server" EnableViewState="true" DataValueField="Id" DataTextField="Name" TabIndex="1010" Width="200px" /> 
         </td> 
        </tr> 

        <tr align="right"> 
         <td align="right" style="width:200px"> 
          From Quantity: 
         </td> 
         <td align="left"> 
          <input type="text" id="hitMinQuantitySearch" name="hitMinQuantitySearch" runat="server" maxlength="9" tabindex="1015" 
           style="width: 90px; text-align: right" onkeydown="return isNumericKeyDown(event, false);" onkeypress="return isNumericKeyPress(event, false);" 
           onblur="MinQuantity_Blurred();" /> 
         </td> 
         <td align="right" style="width:200px"> 
          To Quantity: 
         </td> 
         <td align="left"> 
          <input type="text" id="hitMaxQuantitySearch" name="hitMaxQuantitySearch" runat="server" maxlength="9" tabindex="1020" 
           style="width: 90px; text-align: right" onkeydown="return isNumericKeyDown(event, false);" onkeypress="return isNumericKeyPress(event, false);" /> 
         </td> 
        </tr> 

        <tr align="right"> 
         <td class="columnOne"> 
          From Dated : 
         </td> 

         <td class="columnTwo"> 
          <asp:TextBox ID="txtFromDatedSearch" runat="server" MaxLength="11" TabIndex="1025" onblur="FromDated_Blurred();" Width="90px" /> 
          <asp:CalendarExtender ID="ceFromDatedSearch" runat="server" TargetControlID="txtFromDatedSearch" Format="dd-MMM-yyyy" /> 
         </td> 

         <td class="columnOne"> 
          To Dated : 
         </td> 

         <td class="columnTwo"> 
          <asp:TextBox ID="txtToDatedSearch" runat="server" MaxLength="11" TabIndex="1030" Width="90px" /> 
          <asp:CalendarExtender ID="ceToDatedSearch" runat="server" TargetControlID="txtToDatedSearch" Format="dd-MMM-yyyy" /> 
         </td> 

         <td align="left"> 
          <asp:Button ID="btnLoad" runat="server" Text="Load" TabIndex="1035" CssClass="foreRed gradientGreen cornerRound" OnClick="btnLoad_Click" /> 
         </td> 
        </> 
       </table> 
      </td> 
     </tr> 
     <tr> 
      <td> 
       <asp:GridView ID="gv" runat="server" AutoGenerateColumns="False" DataSourceID="ods" AllowSorting="True" AllowPaging="True" PageSize="5" 
        AutoGenerateSelectButton="True" onrowcommand="gv_RowCommand" CssClass="gridSapphire" PagerStyle-CssClass="pagerSapphire" 
        AlternatingRowStyle-CssClass="alterSapphire" onpageindexchanged="gv_PageIndexChanged" Width="100%" EmptyDataText="List is empty." 
        DataKeyNames="Id" EnableViewState="true" onrowdeleted="gv_RowDeleted"> 
        <PagerSettings Mode="Numeric"/> 
        <Columns> 
         <asp:TemplateField Visible="false"> 
          <ItemTemplate> 
           <asp:Label ID="lblIdGrid" runat="server" Text='<%#Eval("Id") %>'/> 
          </ItemTemplate> 
         </asp:TemplateField> 

         <asp:TemplateField Visible="false"> 
          <ItemTemplate> 
           <asp:Label ID="lblIdItemGrid" runat="server" Text='<%#Eval("IdItem") %>' Style="text-align:left; padding-left:5px" /> 
          </ItemTemplate> 
         </asp:TemplateField> 

         <asp:TemplateField HeaderText="Item" SortExpression="NameItem" ControlStyle-Width="260px"> 
          <ItemTemplate> 
           <asp:Label ID="lblNameItemGrid" runat="server" Text='<%#Eval("NameItem") %>' Style="text-align:left; padding-left:5px" /> 
          </ItemTemplate> 
         </asp:TemplateField> 

         <asp:TemplateField Visible="false"> 
          <ItemTemplate> 
           <asp:Label ID="lblIdOfficerGrid" runat="server" Text='<%#Eval("IdOfficer") %>' Style="text-align:left; padding-left:5px" /> 
          </ItemTemplate> 
         </asp:TemplateField> 

         <asp:TemplateField HeaderText="Officer" SortExpression="NameOfficer" ControlStyle-Width="200px"> 
          <ItemTemplate> 
           <asp:Label ID="lblNameOfficerGrid" runat="server" Text='<%#Eval("NameOfficer") %>' Style="text-align:left; padding-left:5px" /> 
          </ItemTemplate> 
         </asp:TemplateField> 

         <asp:TemplateField HeaderText="Quantity" SortExpression="Quantity" ControlStyle-Width="100px"> 
          <ItemTemplate> 
           <asp:Label ID="lblQuantityGrid" runat="server" Text='<%#Eval("Quantity") %>' Style="text-align:left; padding-left:5px" /> 
          </ItemTemplate> 
         </asp:TemplateField> 

         <asp:TemplateField HeaderText="Dated" SortExpression="Dated" ControlStyle-Width="100px"> 
          <ItemTemplate> 
           <asp:Label ID="lblDatedGrid" runat="server" Text='<%# DateTime.Parse(Eval("Dated").ToString()).ToString("dd-MMM-yyyy") %>' 
            Style="text-align:left; padding-left:5px" /> 
          </ItemTemplate> 
         </asp:TemplateField> 

         <asp:TemplateField> 
          <ItemTemplate> 
           <asp:LinkButton ID="lbDeleteGrid" runat="server" CommandName="Delete" OnClientClick="return confirm('Are you sure you want to delete this Expense?')"> 
            Delete 
           </asp:LinkButton> 
          </ItemTemplate> 
         </asp:TemplateField> 
        </Columns> 
        <PagerStyle CssClass="pagerSapphire" /> 
        <AlternatingRowStyle CssClass="alterSapphire" /> 
       </asp:GridView> 
       <asp:ObjectDataSource ID="ods" runat="server" TypeName="StationaryManagementSystem.Classes.DAL.Expense" 
        SelectMethod="Search" SelectCountMethod="CountSearch" SortParameterName="sSortExpression" EnablePaging="true"    
        StartRowIndexParameterName="iZeroIndexStartPage" MaximumRowsParameterName="iSizePage" 
        onselecting="ods_Selecting" 
        DeleteMethod="Delete" ondeleting="ods_Deleting"> 
         <DeleteParameters> 
          <asp:Parameter Name="ID" Type="Int64" /> 
         </DeleteParameters> 
       </asp:ObjectDataSource> 
      </td> 
     </tr> 
    </table> 
</asp:Panel> 

+0

有兩個問題,一個與select2 ajax控件相關,這個問題可以在下面的答案中解決。第二個與gridview相關,但仍未解決。它跳過gridview,雖然它具有次高的tabindex,並移動到母版頁的頁腳,然後回到gridview。 – Atif 2012-08-02 12:01:42

回答

0

的問題是不是與GridView控件而是一個JavaScript庫select2,我一直在使用,但上面沒有顯示。一旦這個被刪除,標籤排序幾乎按照需要工作。

還存在一些問題。現在標籤在六個控件中正確移動:兩個下拉列表和四個文本框,但之後不會進入gridview。在gridview上設置tabindex並不能解決這個問題。

由於問題證明與本文討論的不同,因此我在此有一個單獨的問題。

如上所述,這裏討論的一些問題仍然存在。如果沒有設置gridview的tabindex,任何人都可以告訴gridview中控件的默認tabindex是什麼。一旦gridview獲得焦點,Tab按照正確的順序工作,但它很難將焦點移動到網格本身。實際上焦點可以通過gridview.Focus();但是這不會將焦點移動到gridview中的第一個元素。因此,當按下標籤時,下一個焦點將全部移到gridview之外。