Làm cách nào để tôi có được GridView
quyền kiểm soát để hiển thị các <thead>
<tbody>
thẻ? Tôi biết .UseAccessibleHeaders
làm cho nó được đặt <th>
thay vì <td>
, nhưng tôi không thể <thead>
xuất hiện.
Làm cách nào để tôi có được GridView
quyền kiểm soát để hiển thị các <thead>
<tbody>
thẻ? Tôi biết .UseAccessibleHeaders
làm cho nó được đặt <th>
thay vì <td>
, nhưng tôi không thể <thead>
xuất hiện.
Câu trả lời:
Điều này nên làm điều đó:
gv.HeaderRow.TableSection = TableRowSection.TableHeader;
HeaderRow
bất động sản sẽ được null
cho đến khi GridView
đã được dữ liệu ràng buộc, vì vậy hãy chắc chắn để chờ cho đến khi databinding đã xảy ra trước khi chạy dòng trên mã.
thead
là sử dụng nó trong jQuery. Tuy nhiên sau khi hiển thị tiêu đề, tbody
dường như không có sẵn. Điều gì có thể bị thiếu trong trường hợp của tôi?
Tôi sử dụng cái này trong OnRowDataBound
trường hợp:
protected void GridViewResults_OnRowDataBound(object sender, GridViewRowEventArgs e) {
if (e.Row.RowType == DataControlRowType.Header) {
e.Row.TableSection = TableRowSection.TableHeader;
}
}
GridView
là trong vòng một UpdatePanel
và một async-postback được gây ra bởi một số điều khiển khác thì OnRowDataBound
sự kiện sẽ không được nâng lên do đó các mã trong câu trả lời này sẽ không được thực hiện, dẫn đến việc GridView
quay trở lại render mà không cần <thead>
thẻ ... tiếng thở dài . Để nhắm mục tiêu trường hợp này, hãy chuyển mã từ câu trả lời được chấp nhận vào PreRender
trình xử lý sự kiện của gridView (giống như câu trả lời của ASalvo gợi ý).
Mã trong câu trả lời cần phải tiếp tục Page_Load
hoặc GridView_PreRender
. Tôi đặt nó trong một phương thức được gọi sau Page_Load
và nhận được một NullReferenceException
.
DataBound
sự kiện. grid.DataBound += (s, e) => { grid.HeaderRow.TableSection = TableRowSection.TableHeader; };
Tôi sử dụng mã sau để thực hiện việc này:
Những if
tuyên bố tôi đã thêm là quan trọng.
Nếu không (tùy thuộc vào cách bạn hiển thị lưới của mình), bạn sẽ đưa ra các ngoại lệ như:
Bảng phải chứa các phần hàng theo thứ tự đầu trang, nội dung và sau đó là chân trang.
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);
}
Đối this
tượng là GridView của tôi.
Tôi thực sự ghi đè GridView của Asp.net để tạo điều khiển tùy chỉnh của riêng mình, nhưng bạn có thể dán nó vào trang aspx.cs của mình và tham chiếu GridView theo tên thay vì sử dụng phương pháp tiếp cận lưới tùy chỉnh.
FYI: Tôi chưa kiểm tra logic footer, nhưng tôi biết điều này hoạt động với Headers.
Điều này phù hợp với tôi:
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;
}
}
Điều này đã được thử trong VS2010.
Tạo một chức năng và sử dụng chức năng đó trong PageLoad
sự kiện của bạn như sau:
Chức năng là:
private void MakeGridViewPrinterFriendly(GridView gridView) {
if (gridView.Rows.Count > 0) {
gridView.UseAccessibleHeader = true;
gridView.HeaderRow.TableSection = TableRowSection.TableHeader;
}
}
Sự PageLoad
kiện là:
protected void Page_Load(object sender, EventArgs e) {
if (!IsPostBack)
{
MakeGridViewPrinterFriendly(grddata);
}
}
Tôi biết câu này đã cũ, nhưng đây là cách giải thích câu trả lời của MikeTeeVee, cho một cái nhìn tiêu chuẩn:
trang 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;
}
}