Pourquoi ne GridView pas le rendu de la ligne d'en-tête comme thead après la publication?
Réglage TableSection = TableRowSection.TableHeader
après la grille est liée occupe dans un premier temps, de mettre la ligne d'en-tête thead
. Après une publication (où le réseau électrique n'est pas re-lié) de la ligne d'en-tête revient à la table du corps. J'attends de la ligne d'en-tête pour rester dans le thead; quelqu'un peut m'expliquer pourquoi ce n'est pas le cas ou ce que je fais de mal?
Exemple:
Cliquez sur le bouton pour provoquer une publication. L'en-tête n'est pas orange après la publication puisqu'il n'est pas dans thead
plus.
aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="gridtest.aspx.cs" Inherits="ffff.gridtest" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<style type="text/css">
thead th { background-color:Orange;}
</style>
</head>
<body>
<form id="form1" runat="server">
<div><asp:Button ID="Button1" runat="server" Text="Button" />
this button is here just to trigger a postback</div>
<asp:GridView ID="gv1" runat="server"></asp:GridView>
</form>
</body>
</html>
code
using System;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace ffff
{
public partial class gridtest : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
gv1.DataBound += new EventHandler(gv1_DataBound);
if (!IsPostBack) { BindGrid(); }
}
void Page_PreRender(object sender, EventArgs e)
{
if (gv1.HeaderRow != null)
System.Diagnostics.Debug.WriteLine(gv1.HeaderRow.TableSection); //still TableHeader after postback
}
void gv1_DataBound(object sender, EventArgs e)
{
if (gv1.HeaderRow != null)
{
gv1.HeaderRow.TableSection = TableRowSection.TableHeader;
}
}
private void BindGrid()
{
gv1.DataSource = this.Page.Controls;
gv1.DataBind();
}
}
}
double possible de Comment puis-je obtenir Gridview pour rendre THEAD?
OriginalL'auteur lincolnk | 2011-07-08
Vous devez vous connecter pour publier un commentaire.
Utiliser le Pre_Render_Complete événement au lieu d'ajouter le tableau de la section. Cela permettra d'assurer la
thead
section est toujours ajoutée. Comme vous êtes en train de travailler sur DataBound la section ne sera ajouté lorsque les données sont liés.N'hésitez pas à changer la ligne check-je utiliser pour la vérification de la Ligne d'en-Tête existe en tant que vous ne le font actuellement.
GridView
plutôt que d'en hériter d'elle donc je joint un gestionnaire d'événement pourPreRender
et cela fonctionne. Je ne comprends pas pourquoi si-gv1.HeaderRow.TableSection
a une valeur deTableHeader
avant et après cette mission. Est-il quelque chose qui se passe au sein de l'incubateur qui est responsable de la prise de ce rendu correctement?Malheureusement je ne peux pas vous donner une réponse à pourquoi c'est le cas, seulement qu'il fonctionne. Mon OnPrerenderComplete annuler est en fait à un niveau de page. Souvent si j'ai plusieurs grilles sur une page, je vais charger la tous les en-tête du tableau des sections en un seul endroit. Je pourrais avoir un peu de l'enquête et/ou expérience dans la mécanique de ce à la lumière de votre question de suivi à
Intéressant. Quand l'Intensification par le biais de ma page OnPreRenderComplete montre HeaderRow.TableSection comme TableBody avant la cession, en veillant à l'état d'affichage est activé. ViewState est enregistré après le PreRenderComplete événement (msdn.microsoft.com/en-us/library/ms178472.aspx), de sorte que n'est pas la question.
J'avais besoin de l'utiliser dans un Usercontrol, j'ai donc utilisé le OnPreRender de l'événement et il a bien fonctionné.
Je vous remercie. Il a encore jeté des exceptions pour moi, j'ai donc élargi votre approche pour l'adapter à mes besoins. Voir ma réponse ici: stackoverflow.com/a/19846059/555798
OriginalL'auteur Jon P
Vous devez définir TableSection après la méthode DataBind.
TableSection
est toujours définie commeTableHeader
.À partir de forums.asp.net/t/1004097.aspx?GridView+HeaderRow+null+ - HeaderRow est nulle lorsque votre datatable est vide (ou, dans ce cas, ce.Page.Commandes est vide)
OriginalL'auteur Nakajima Shigeru
Viens de mettre le code ci-dessous dans le pré-rendu des événements de la gridview
OriginalL'auteur Vinay