ASP中的ASP.Net WebForms GridView表头行 - 排序时

时间:2016-02-15 14:11:23

标签: asp.net gridview twitter-bootstrap-3 webforms

我正在使旧的ASP.Net WebForms应用程序的UI现代化。我使用Bootstrap 3来实现这一目标。大多数控件都很容易重新设置,但GridView控件有些麻烦。 Bootstrap需要表标题位于thead部分,但GridView控件在表体部分内呈现标题。 我能够使用以下代码强制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元素中呈现其标题?

1 个答案:

答案 0 :(得分:1)

我希望我知道为什么,但显然OnPreRender事件并不总是触发。

我发现以下内容始终位于gridview的RowDataBound事件中。

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

这还有一个额外的好处,就是无需检查代码以查看是否有行,因为事件只会在有事件时触发。