AD中的ASP.Net WebForms GridView表格标题行-排序时

AD中的ASP.Net WebForms GridView表格标题行-排序时,asp.net,gridview,twitter-bootstrap-3,webforms,Asp.net,Gridview,Twitter Bootstrap 3,Webforms,我正在更新旧ASP.NETWebForms应用程序的UI。我使用bootstrap3来实现这一点。大多数控件很容易重新设置样式,但GridView控件会带来一些麻烦。 Bootstrap需要表头位于thead部分,但是GridView控件会将表头呈现在table body部分中。 我能够使用以下代码强制GridView在thead元素中呈现标题: public class AdvancedGridView : GridView { #region Overrides of GridVie

我正在更新旧ASP.NETWebForms应用程序的UI。我使用bootstrap3来实现这一点。大多数控件很容易重新设置样式,但GridView控件会带来一些麻烦。 Bootstrap需要表头位于thead部分,但是GridView控件会将表头呈现在table body部分中。 我能够使用以下代码强制GridView在thead元素中呈现标题:

public class AdvancedGridView : GridView
{
    #region Overrides of GridView

    protected override void OnPreRender( EventArgs e )
    {
        if ( ( ShowHeader && Rows.Count > 0 ) || ShowHeaderWhenEmpty )
            HeaderRow.TableSection = TableRowSection.TableHeader;
        if ( ShowFooter && Rows.Count > 0 )
            FooterRow.TableSection = TableRowSection.TableFooter;

        base.OnPreRender( e );
    }

    #endregion
}
但我仍然有一个问题。一旦用户按任何列对表进行排序,GridView控件将再次呈现并将标题移动到表体元素中


当GridView按用户排序时,如何使它在thead元素中呈现其标题?

我希望知道原因,但显然OnPreRender事件并不总是触发

我发现,在gridview的RowDataBound事件中始终可以执行以下操作

if (e.Row.RowType == DataControlRowType.Header) 
  e.Row.TableSection = TableRowSection.TableHeader;

这还有一个额外的优点,即不必检查代码中是否有行,因为事件只有在有行的情况下才会触发。

我不知道您是如何进行排序的,而且我从未使用过PreRender,但我总是在RowDataBound事件中发现这一点:
if(e.Row.RowType==DataControlRowType.Header)e.Row.TableSection=TableRowSection.TableHeader非常感谢!这个解决方案对我非常有效。如果你添加它作为答案,我将接受它作为正确的解决方案。