Etiketleri GridViewişlemek için kontrolü nasıl elde edebilirim <thead> <tbody>? Biliyorum .UseAccessibleHeaderso koydu yapar <th>yerine <td>, ama uyuyamıyrom <thead>görünmesini.
Etiketleri GridViewişlemek için kontrolü nasıl elde edebilirim <thead> <tbody>? Biliyorum .UseAccessibleHeaderso koydu yapar <th>yerine <td>, ama uyuyamıyrom <thead>görünmesini.
Yanıtlar:
Bunu yapmalı:
gv.HeaderRow.TableSection = TableRowSection.TableHeader;
HeaderRowMülkiyet olacak nullkadar GridViewveri bağlı olmuştur böylece veri bağlama kod yukarıdaki satırı çalıştırmadan önce oluştu kadar beklemek emin olun.
thead, onu jQuery'de kullanmaktır. Ancak üstbilgiyi oluşturduktan sonra tbodymevcut görünmüyor. Benim durumumda eksik olan ne olabilir?
Bunu OnRowDataBoundolayda kullanıyorum:
protected void GridViewResults_OnRowDataBound(object sender, GridViewRowEventArgs e) {
if (e.Row.RowType == DataControlRowType.Header) {
e.Row.TableSection = TableRowSection.TableHeader;
}
}
GridViewbir içindeyse UpdatePanelve eşzamansız bir geri gönderme başka bir denetimden kaynaklanıyorsa, bu OnRowDataBounddurumda olay yükseltilmeyecek, bu nedenle bu yanıttaki kod çalıştırılmayacak, bu GridViewda <thead>etiketler olmadan oluşturmaya geri dönülmesine neden olacak ... ah . Bu durumu hedeflemek için , kabul edilen yanıttan kodu gridView PreRenderolay işleyicisine taşıyın ( ASalvo'nun yanıtının önerdiği gibi).
Cevaptaki kodun Page_Loadveya devam etmesi gerekiyor GridView_PreRender. Sonra çağrılan bir yönteme koydum Page_Loadve bir NullReferenceException.
DataBoundetkinlik de koyabilirsiniz . grid.DataBound += (s, e) => { grid.HeaderRow.TableSection = TableRowSection.TableHeader; };
Bunu yapmak için aşağıdaki kodu kullanıyorum:
ifBen ekledi ifadeleri önemlidir.
Aksi takdirde (ızgaranızı nasıl oluşturduğunuza bağlı olarak) aşağıdaki gibi istisnalar atarsınız:
Tablo, başlık, gövde ve ardından altbilgi sırasıyla satır bölümleri içermelidir.
protected override void OnPreRender(EventArgs e)
{
if ( (this.ShowHeader == true && this.Rows.Count > 0)
|| (this.ShowHeaderWhenEmpty == true))
{
//Force GridView to use <thead> instead of <tbody> - 11/03/2013 - MCR.
this.HeaderRow.TableSection = TableRowSection.TableHeader;
}
if (this.ShowFooter == true && this.Rows.Count > 0)
{
//Force GridView to use <tfoot> instead of <tbody> - 11/03/2013 - MCR.
this.FooterRow.TableSection = TableRowSection.TableFooter;
}
base.OnPreRender(e);
}
thisNesne benim GridView olduğunu.
Aslında kendi özel denetimimi yapmak için Asp.net GridView'u geçersiz kıldım , ancak bunu aspx.cs sayfanıza yapıştırabilir ve özel gridview yaklaşımını kullanmak yerine GridView'a adıyla başvurabilirsiniz .
Bilginize: Altbilgi mantığını test etmedim, ancak bunun Başlıklar için işe yaradığını biliyorum.
Bu benim için çalışıyor:
protected void GrdPagosRowCreated(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
e.Row.TableSection = TableRowSection.TableBody;
}
else if (e.Row.RowType == DataControlRowType.Header)
{
e.Row.TableSection = TableRowSection.TableHeader;
}
else if (e.Row.RowType == DataControlRowType.Footer)
{
e.Row.TableSection = TableRowSection.TableFooter;
}
}
Bu VS2010'da denendi.
Bunun eski olduğunu biliyorum, ancak standart bir kılavuz görünümü için MikeTeeVee'nin cevabının bir yorumu:
aspx sayfası:
<asp:GridView ID="GridView1" runat="server"
OnPreRender="GridView_PreRender">
aspx.cs:
protected void GridView_PreRender(object sender, EventArgs e)
{
GridView gv = (GridView)sender;
if ((gv.ShowHeader == true && gv.Rows.Count > 0)
|| (gv.ShowHeaderWhenEmpty == true))
{
//Force GridView to use <thead> instead of <tbody> - 11/03/2013 - MCR.
gv.HeaderRow.TableSection = TableRowSection.TableHeader;
}
if (gv.ShowFooter == true && gv.Rows.Count > 0)
{
//Force GridView to use <tfoot> instead of <tbody> - 11/03/2013 - MCR.
gv.FooterRow.TableSection = TableRowSection.TableFooter;
}
}
Bir işlev oluşturun ve bu işlevi PageLoadetkinliğinizde şu şekilde kullanın:
İşlev şudur:
private void MakeGridViewPrinterFriendly(GridView gridView) {
if (gridView.Rows.Count > 0) {
gridView.UseAccessibleHeader = true;
gridView.HeaderRow.TableSection = TableRowSection.TableHeader;
}
}
PageLoadOlaydır:
protected void Page_Load(object sender, EventArgs e) {
if (!IsPostBack)
{
MakeGridViewPrinterFriendly(grddata);
}
}