Etiketleri GridView
işlemek için kontrolü nasıl elde edebilirim <thead>
<tbody>
? Biliyorum .UseAccessibleHeaders
o koydu yapar <th>
yerine <td>
, ama uyuyamıyrom <thead>
görünmesini.
Etiketleri GridView
işlemek için kontrolü nasıl elde edebilirim <thead>
<tbody>
? Biliyorum .UseAccessibleHeaders
o koydu yapar <th>
yerine <td>
, ama uyuyamıyrom <thead>
görünmesini.
Yanıtlar:
Bunu yapmalı:
gv.HeaderRow.TableSection = TableRowSection.TableHeader;
HeaderRow
Mülkiyet olacak null
kadar GridView
veri 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 tbody
mevcut görünmüyor. Benim durumumda eksik olan ne olabilir?
Bunu OnRowDataBound
olayda kullanıyorum:
protected void GridViewResults_OnRowDataBound(object sender, GridViewRowEventArgs e) {
if (e.Row.RowType == DataControlRowType.Header) {
e.Row.TableSection = TableRowSection.TableHeader;
}
}
GridView
bir içindeyse UpdatePanel
ve eşzamansız bir geri gönderme başka bir denetimden kaynaklanıyorsa, bu OnRowDataBound
durumda olay yükseltilmeyecek, bu nedenle bu yanıttaki kod çalıştırılmayacak, bu GridView
da <thead>
etiketler olmadan oluşturmaya geri dönülmesine neden olacak ... ah . Bu durumu hedeflemek için , kabul edilen yanıttan kodu gridView PreRender
olay işleyicisine taşıyın ( ASalvo'nun yanıtının önerdiği gibi).
Cevaptaki kodun Page_Load
veya devam etmesi gerekiyor GridView_PreRender
. Sonra çağrılan bir yönteme koydum Page_Load
ve bir NullReferenceException
.
DataBound
etkinlik de koyabilirsiniz . grid.DataBound += (s, e) => { grid.HeaderRow.TableSection = TableRowSection.TableHeader; };
Bunu yapmak için aşağıdaki kodu kullanıyorum:
if
Ben 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);
}
this
Nesne 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 PageLoad
etkinliğ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;
}
}
PageLoad
Olaydır:
protected void Page_Load(object sender, EventArgs e) {
if (!IsPostBack)
{
MakeGridViewPrinterFriendly(grddata);
}
}