Bagaimana cara mendapatkan GridViewkontrol untuk merender <thead> <tbody>tag? Aku tahu .UseAccessibleHeadersmembuatnya jadi <th>lebih baik <td>, tapi aku tidak bisa membuatnya <thead>muncul.
Bagaimana cara mendapatkan GridViewkontrol untuk merender <thead> <tbody>tag? Aku tahu .UseAccessibleHeadersmembuatnya jadi <th>lebih baik <td>, tapi aku tidak bisa membuatnya <thead>muncul.
Jawaban:
Ini harus melakukannya:
gv.HeaderRow.TableSection = TableRowSection.TableHeader;
HeaderRowproperti akan nullsampai GridViewtelah data terikat, jadi pastikan untuk menunggu sampai penyatuan data telah terjadi sebelum menjalankan baris di atas kode.
theadadalah menggunakannya di jQuery. Namun setelah rendering header, tbodytampaknya tidak tersedia. Apa yang mungkin hilang dalam kasus saya?
Saya menggunakan ini dalam OnRowDataBoundacara:
protected void GridViewResults_OnRowDataBound(object sender, GridViewRowEventArgs e) {
if (e.Row.RowType == DataControlRowType.Header) {
e.Row.TableSection = TableRowSection.TableHeader;
}
}
GridViewdalam UpdatePaneldan async-postback disebabkan oleh beberapa kontrol lain maka OnRowDataBoundacara tidak akan dimunculkan sehingga kode dalam jawaban ini tidak akan dijalankan, mengakibatkan GridViewkembali ke rendering tanpa <thead>tag ... sigh . Untuk menargetkan kasus ini, dorong kode dari jawaban yang diterima ke dalam PreRenderevent handler gridView (seperti yang disarankan oleh jawaban ASalvo ).
Kode dalam jawaban harus berupa Page_Loadatau GridView_PreRender. Saya memasukkannya ke dalam metode yang dipanggil Page_Loaddan mendapatkan file NullReferenceException.
DataBoundacara. grid.DataBound += (s, e) => { grid.HeaderRow.TableSection = TableRowSection.TableHeader; };
Saya menggunakan kode berikut untuk melakukan ini:
The ifpernyataan saya menambahkan penting.
Jika tidak (tergantung cara Anda merender kisi), Anda akan menampilkan pengecualian seperti:
Tabel harus berisi bagian baris dalam urutan header, isi, dan kemudian footer.
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);
}
The thisobjek adalah GridView saya.
Saya sebenarnya mengesampingkan Asp.net GridView untuk membuat kontrol kustom saya sendiri, tetapi Anda dapat menempelkannya ke halaman aspx.cs Anda dan mereferensikan GridView dengan nama daripada menggunakan pendekatan custom-gridview.
FYI: Saya belum menguji logika footer, tapi saya tahu ini berfungsi untuk Header.
Ini bekerja untuk saya:
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;
}
}
Ini dicoba di VS2010.
Buat fungsi dan gunakan fungsi itu di PageLoadacara Anda seperti ini:
Fungsinya adalah:
private void MakeGridViewPrinterFriendly(GridView gridView) {
if (gridView.Rows.Count > 0) {
gridView.UseAccessibleHeader = true;
gridView.HeaderRow.TableSection = TableRowSection.TableHeader;
}
}
The PageLoadevent adalah:
protected void Page_Load(object sender, EventArgs e) {
if (!IsPostBack)
{
MakeGridViewPrinterFriendly(grddata);
}
}
Saya tahu ini sudah tua, tetapi, inilah interpretasi dari jawaban MikeTeeVee, untuk tampilan kisi standar:
halaman aspx:
<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;
}
}