टैग्स GridView
को रेंडर करने के लिए मुझे कैसे कंट्रोल मिलेगा <thead>
<tbody>
? मुझे पता .UseAccessibleHeaders
है कि <th>
इसके बजाय इसे रखा जाता है <td>
, लेकिन मुझे <thead>
दिखने के लिए नहीं मिल सकता है।
टैग्स GridView
को रेंडर करने के लिए मुझे कैसे कंट्रोल मिलेगा <thead>
<tbody>
? मुझे पता .UseAccessibleHeaders
है कि <th>
इसके बजाय इसे रखा जाता है <td>
, लेकिन मुझे <thead>
दिखने के लिए नहीं मिल सकता है।
जवाबों:
यह करना चाहिए:
gv.HeaderRow.TableSection = TableRowSection.TableHeader;
HeaderRow
संपत्ति हो जाएगा null
जब तक GridView
डेटा बाध्य कर दिया गया है, इसलिए जब तक डेटा बाइंडिंग कोड के ऊपर लाइन चलाने से पहले आ गई है प्रतीक्षा करना सुनिश्चित करें।
thead
वह jQuery में इसका उपयोग करना है। हालांकि हेडर रेंडर करने के बाद tbody
उपलब्ध नहीं लगता है। मेरे मामले में क्या गायब हो सकता है?
मैं इस OnRowDataBound
घटना में उपयोग करते हैं :
protected void GridViewResults_OnRowDataBound(object sender, GridViewRowEventArgs e) {
if (e.Row.RowType == DataControlRowType.Header) {
e.Row.TableSection = TableRowSection.TableHeader;
}
}
GridView
के भीतर है UpdatePanel
और एक async-postback किसी अन्य नियंत्रण के कारण होता है, तो OnRowDataBound
ईवेंट को नहीं उठाया जाएगा, इसलिए इस उत्तर में कोड निष्पादित नहीं किया जाएगा, जिसके परिणामस्वरूप टैग के GridView
बिना रेंडर करने के लिए पुन: दावा किया जा रहा है <thead>
... आह । इस मामले को लक्षित करने के लिए, कोड को ग्रिडव्यू के इवेंट हैंडलर में स्वीकृत उत्तर से अलग कर दें PreRender
(बहुत कुछ असाल्वो के जवाब से पता चलता है)।
उत्तर में कोड पर Page_Load
या जाने की जरूरत है GridView_PreRender
। मैंने इसे एक विधि में रखा, जिसे बाद में बुलाया गया Page_Load
और ए मिला NullReferenceException
।
DataBound
इवेंट में भी डाल सकते हैं । grid.DataBound += (s, e) => { grid.HeaderRow.TableSection = TableRowSection.TableHeader; };
मैं ऐसा करने के लिए निम्न कोड का उपयोग करता हूं:
if
बयान मैं जोड़ा महत्वपूर्ण हैं।
अन्यथा (आप अपना ग्रिड कैसे प्रस्तुत करते हैं इसके आधार पर) आप अपवादों को फेंक देंगे:
तालिका में शीर्ष लेख, बॉडी और फिर पाद लेख के क्रम में पंक्ति अनुभाग होना चाहिए।
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
वस्तु मेरे GridView है।
मैं वास्तव में अपने स्वयं के कस्टम नियंत्रण बनाने के लिए Asp.net GridView को ओवररोड करता हूं, लेकिन आप इसे अपने aspx.cs पृष्ठ में पेस्ट कर सकते हैं और कस्टम-ग्रिडव्यू दृष्टिकोण का उपयोग करने के बजाय नाम द्वारा ग्रिड दृश्य का संदर्भ दे सकते हैं।
FYI करें: मैंने पाद तर्क का परीक्षण नहीं किया है, लेकिन मुझे यह पता है कि हेडर्स के लिए यह काम करता है।
यह मेरे लिए काम करता है:
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;
}
}
यह वीएस2010 में आजमाया गया था।
एक फंक्शन बनाएं और अपने फंक्शन में उस फंक्शन को PageLoad
इस तरह से इस्तेमाल करें:
समारोह है:
private void MakeGridViewPrinterFriendly(GridView gridView) {
if (gridView.Rows.Count > 0) {
gridView.UseAccessibleHeader = true;
gridView.HeaderRow.TableSection = TableRowSection.TableHeader;
}
}
PageLoad
घटना है:
protected void Page_Load(object sender, EventArgs e) {
if (!IsPostBack)
{
MakeGridViewPrinterFriendly(grddata);
}
}
मुझे पता है कि यह पुराना है, लेकिन, यहां मानक ग्रिडव्यू के लिए माइकटेवी के जवाब की व्याख्या है:
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;
}
}