2

サイトのタブインデックスを設定しようとしていますが、グリッドビューの列見出しに問題があります。フォーム コントロール (マークアップを使用) とグリッドビューの行セル (C# を使用) の tabindex を設定できますが、グリッドビューの列見出しは設定できません。グリッドビューのマークアップは次のとおりです。

<asp:GridView ID="grdBCReferrals" runat="server" AutoGenerateColumns="False" OnPageIndexChanging="grdBCReferrals_PageIndexChanging"
            OnSorting="grdBCReferrals_Sorting" HeaderStyle-CssClass="gridHeader" AllowPaging="True"
            AllowSorting="True" DataKeyNames="ID" Width="100%">                
    <Columns>            
        <asp:BoundField DataField="ID" HeaderText="Id" SortExpression="Id">
        </asp:BoundField>
        <asp:BoundField DataField="CreatedOn" HeaderText="Created On" SortExpression="CreatedOn">
        </asp:BoundField>
        <asp:BoundField DataField="Type" HeaderText="Type" SortExpression="Type">
        </asp:BoundField>
        <asp:BoundField DataField="Name" HeaderText="Name" SortExpression="Name">
        </asp:BoundField>
        <asp:BoundField DataField="Status" HeaderText="Status" SortExpression="Status">
        </asp:BoundField>            
    </Columns>
</asp:GridView>

すべてのグリッドビューセルをタブで移動した後、列見出しがフォーカスを受け取り、タブで移動できるため、それが可能であることはわかっていますが、それは私が望む順序ではありません。これは、行セルの後に意図的なタブインデックスが設定されなくなり、デフォルトのページタブが開始され、タブインデックスが設定されていないアイテムにフォーカスが設定されるためだと思います。

明確にするために、現在のタブインデックスは次のとおりです。

フォーム コントロール > GridView セル > Gridview ヘッダー

私はそれが欲しい:

フォーム コントロール > GridView ヘッダー > GridView セル

マークアップまたはコードビハインドのいずれかを使用して午前中ずっとこれを行う方法を見つけようとしてきましたが、この問題に固有の解決策やフォーラムの投稿はないようです.

誰でも私を助けることができますか?

4

1 に答える 1

1

同僚の助けを借りて最終的にこれを解決することができましたが、投稿が更新されないのは嫌いなので、次のようにします。

次のコードを使用して、グリッドビューの OnRowDataBound トリガーを追加しました。

protected void grdBCReferrals_RowDataBound(object sender, GridViewRowEventArgs e)
    {            
        int LoopCounter;

        // Variable for starting index. Use this to make sure the tabindexes start at a higher
        // value than any other controls above the gridview. 
        // Header row indexes will be 110, 111, 112...
        // First data row will be 210, 211, 212... 
        // Second data row 310, 311, 312 .... and so on
        int tabIndexStart = 10; 

        for (LoopCounter = 0; LoopCounter < e.Row.Cells.Count; LoopCounter++)
        {                
            if (e.Row.RowType == DataControlRowType.Header)
            {
                // Check to see if the cell contains any controls
                if (e.Row.Cells[LoopCounter].Controls.Count > 0)
                {
                    // Set the TabIndex. Increment RowIndex by 2 because it starts at -1
                    ((LinkButton)e.Row.Cells[LoopCounter].Controls[0]).TabIndex = short.Parse((e.Row.RowIndex + 2).ToString() + tabIndexStart++.ToString());
                }
            }
            else if (e.Row.RowType == DataControlRowType.DataRow)
            {
                // Set the TabIndex. Increment RowIndex by 2 because it starts at -1
                e.Row.Cells[LoopCounter].TabIndex = short.Parse((e.Row.RowIndex + 2).ToString() + tabIndexStart++.ToString());
            }                
        }
    }

これが他の誰かに役立つことを願っています

于 2012-09-24T08:16:41.360 に答える