Bagaimana cara mendapatkan GridView
kontrol untuk merender <thead>
<tbody>
tag? Aku tahu .UseAccessibleHeaders
membuatnya jadi <th>
lebih baik <td>
, tapi aku tidak bisa membuatnya <thead>
muncul.
Bagaimana cara mendapatkan GridView
kontrol untuk merender <thead>
<tbody>
tag? Aku tahu .UseAccessibleHeaders
membuatnya jadi <th>
lebih baik <td>
, tapi aku tidak bisa membuatnya <thead>
muncul.
Jawaban:
Ini harus melakukannya:
gv.HeaderRow.TableSection = TableRowSection.TableHeader;
HeaderRow
properti akan null
sampai GridView
telah data terikat, jadi pastikan untuk menunggu sampai penyatuan data telah terjadi sebelum menjalankan baris di atas kode.
thead
adalah menggunakannya di jQuery. Namun setelah rendering header, tbody
tampaknya tidak tersedia. Apa yang mungkin hilang dalam kasus saya?
Saya menggunakan ini dalam OnRowDataBound
acara:
protected void GridViewResults_OnRowDataBound(object sender, GridViewRowEventArgs e) {
if (e.Row.RowType == DataControlRowType.Header) {
e.Row.TableSection = TableRowSection.TableHeader;
}
}
GridView
dalam UpdatePanel
dan async-postback disebabkan oleh beberapa kontrol lain maka OnRowDataBound
acara tidak akan dimunculkan sehingga kode dalam jawaban ini tidak akan dijalankan, mengakibatkan GridView
kembali ke rendering tanpa <thead>
tag ... sigh . Untuk menargetkan kasus ini, dorong kode dari jawaban yang diterima ke dalam PreRender
event handler gridView (seperti yang disarankan oleh jawaban ASalvo ).
Kode dalam jawaban harus berupa Page_Load
atau GridView_PreRender
. Saya memasukkannya ke dalam metode yang dipanggil Page_Load
dan mendapatkan file NullReferenceException
.
DataBound
acara. grid.DataBound += (s, e) => { grid.HeaderRow.TableSection = TableRowSection.TableHeader; };
Saya menggunakan kode berikut untuk melakukan ini:
The if
pernyataan 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 this
objek 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 PageLoad
acara Anda seperti ini:
Fungsinya adalah:
private void MakeGridViewPrinterFriendly(GridView gridView) {
if (gridView.Rows.Count > 0) {
gridView.UseAccessibleHeader = true;
gridView.HeaderRow.TableSection = TableRowSection.TableHeader;
}
}
The PageLoad
event 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;
}
}