我正在使旧的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元素中呈现其标题?
答案 0 :(得分:1)
我希望我知道为什么,但显然OnPreRender事件并不总是触发。
我发现以下内容始终位于gridview的RowDataBound事件中。
if (e.Row.RowType == DataControlRowType.Header)
e.Row.TableSection = TableRowSection.TableHeader;
这还有一个额外的好处,就是无需检查代码以查看是否有行,因为事件只会在有事件时触发。