क्या डेटाग्रिड नियंत्रण को टैब और थैड HTML तत्वों को प्रस्तुत करने का कोई तरीका है?एएसपी.नेट 2.0 - डेटा/ग्रिड के साथ डेटाग्रिड
उत्तर
डेटाग्रिड में आपकी आवश्यकताओं को पूरा करने के लिए कुछ अंतर्निहित नहीं है। ASP.NET 2.0 CSS Friendly Control Adapters 1.0 पर एक नज़र डालें, उनके पास डेटाव्यू के लिए अंतर्निहित समर्थन है, लेकिन लगता है कि आप आसानी से डेटाग्रिड के लिए इस विचार को अपना सकते हैं।
ठीक है, ऐसा लगता है कि डेटा ग्रिड बॉक्स के बाहर इसका समर्थन नहीं करता है, इसलिए मुझे डेटाग्रिड से विरासत में एक कक्षा बनाना पड़ा है। डेटाग्रिड के प्रस्तुत होने के बाद मैं HTML को पार्स करता हूं और तत्वों को सही जगह पर इंजेक्ट करता हूं।
संलग्न उन लोगों के लिए मेरी कक्षा है जो जानना चाहते हैं कि कैसे। यह एक त्वरित और गंदा दृष्टिकोण है, इसलिए मुझे बेहतर विचारों में आपका स्वागत है।
Imports System.IO
Imports System.Text
Public Class TestDataGrid
Inherits System.Web.UI.WebControls.DataGrid
Private sTHeadClass As String = String.Empty
Private sTBodyClass As String = String.Empty
Private sTFootClass As String = String.Empty
#Region " Properties "
Public Property THeadClass() As String
Get
Return sTHeadClass
End Get
Set(ByVal value As String)
sTHeadClass = value
End Set
End Property
Public Property TBodyClass() As String
Get
Return sTBodyClass
End Get
Set(ByVal value As String)
sTBodyClass = value
End Set
End Property
Public Property TFootClass() As String
Get
Return sTFootClass
End Get
Set(ByVal value As String)
sTFootClass = value
End Set
End Property
#End Region
Protected Overrides Sub Render(ByVal writer As System.Web.UI.HtmlTextWriter)
Dim oMemoryStream As New MemoryStream()
Dim oStreamWriter As New StreamWriter(oMemoryStream)
Dim oStreamReader As New StreamReader(oMemoryStream)
Dim oHtmlTextWriter As New HtmlTextWriter(oStreamWriter)
MyBase.Render(oHtmlTextWriter)
oHtmlTextWriter.Flush()
oMemoryStream.Flush()
oMemoryStream.Position = 0
Dim sHtml As String = oStreamReader.ReadToEnd()
Dim oHtml As New Text.StringBuilder()
Dim iPastIndex As Integer = 0
Dim iIndex As Integer = sHtml.IndexOf("<tr>")
oHtml.Append(sHtml.Substring(iPastIndex, iIndex - iPastIndex))
iPastIndex = iIndex
If ShowHeader Then
WriteElementStart(oHtml, "thead", sTHeadClass)
'Write Header Row
iIndex = sHtml.IndexOf("</tr>", iPastIndex) + 5
oHtml.Append(sHtml.Substring(iPastIndex, iIndex - iPastIndex))
iPastIndex = iIndex
oHtml.Append("</thead>")
WriteElementStart(oHtml, "tbody", sTBodyClass)
Else
WriteElementStart(oHtml, "tbody", sTBodyClass)
End If
If ShowFooter Then
'Writer Body Rows
iIndex = sHtml.LastIndexOf("<tr>")
oHtml.Append(sHtml.Substring(iPastIndex, iIndex - iPastIndex))
iPastIndex = iIndex
WriteElementEnd(oHtml, "tbody")
WriteElementStart(oHtml, "tfoot", sTFootClass)
'Write Footer Row
iIndex = sHtml.LastIndexOf("</table>")
oHtml.Append(sHtml.Substring(iPastIndex, iIndex - iPastIndex))
iPastIndex = iIndex
WriteElementEnd(oHtml, "tfoot")
Else
iIndex = sHtml.LastIndexOf("</table>")
oHtml.Append(sHtml.Substring(iPastIndex, iIndex - iPastIndex))
iPastIndex = iIndex
WriteElementEnd(oHtml, "tbody")
End If
oHtml.Append(sHtml.Substring(iPastIndex, sHtml.Length - iPastIndex))
writer.Write(oHtml.ToString())
End Sub
Private Sub WriteElementStart(ByVal Builder As StringBuilder, ByVal Tag As String, ByVal CssClass As String)
If String.IsNullOrEmpty(CssClass) Then
Builder.AppendFormat("<{0}>", Tag)
Else
Builder.AppendFormat("<{0} class='{1}'>", Tag, CssClass)
End If
End Sub
Private Sub WriteElementEnd(ByVal Builder As StringBuilder, ByVal Tag As String)
Builder.AppendFormat("</{0}>", Tag)
End Sub
End Class
क्षमा करें, लेकिन मुझे यह समाधान पसंद नहीं है। उदाहरण के लिए यह एचटीएमएलवाइटर पर निर्भर करता है। UpperCaseHtmlWriter के साथ आपका समाधान काम नहीं करेगा। मेमोरीस्ट्रीम के साथ कोड भी ... HtmlTextWriter ... –
क्या आप आगे समझा सकते हैं? नियंत्रण की रेंडर विधि एक HTML के रूप में एक HTMLTextWriter expets, यह परिभाषा में है! मेमोरीस्ट्रीम, आदि पर आपका आपत्ति क्या है – Ady
यह जावास्क्रिप्ट के माध्यम से भी किया जा सकता है।
<body onload="javascript: AddTHEAD('DataGridId')">
स्रोत:: http://www.codeproject.com/KB/grid/HeaderOnEachPage.aspx
एक जावास्क्रिप्ट समाधान अच्छा है! –
मैं "user186197" द्वारा उत्तर चाहते है, कि ब्लॉग पोस्ट प्रतिबिंब का उपयोग करता है, चीजों को
function AddTHEAD(tableName)
{
var table = document.getElementById(tableName);
if(table != null)
{
var head = document.createElement("THEAD");
head.style.display = "table-header-group";
head.appendChild(table.rows[0]);
table.insertBefore(head, table.childNodes[0]);
}
}
तो फिर तुम ऐसे ही शरीर ऑनलोड पर इस समारोह कॉल करना होगा गैर-पूर्ण-भरोसेमंद होस्टिंग वातावरण में गलत हो सकता है। यहां हम जो भी उपयोग करते हैं, कोई हैक्स नहीं:
public class THeadDataGrid : System.Web.UI.WebControls.DataGrid
{
protected override void OnPreRender(EventArgs e)
{
this.UseAccessibleHeader = true; //to make sure we render TH, not TD
Table table = Controls[0] as Table;
if (table != null && table.Rows.Count > 0)
{
table.Rows[0].TableSection = TableRowSection.TableHeader;
table.Rows[table.Rows.Count - 1].TableSection = TableRowSection.TableFooter;
}
base.OnPreRender(e);
}
}
मुझे कुछ मामूली परिवर्तनों के साथ इस समाधान को पसंद है: 'अगर (यह। शोहेडर) तालिका। पंक्तियां [0] .टेबलसेक्शन = टेबलरोवसेक्शन .टेबलहेडर;' और 'अगर (यह। शोफूटर) तालिका। पंक्तियां [table.Rows.Count - 1] .टेबलसेक्शन = TableRowSection.TableFooter; ' –
@ जॉन आलर्स हम इस वर्ग का मौजूदा
हालांकि यह उत्तर काम करता है और मैं इसकी बहुत सराहना करता हूं, यह ऐसी चीजें हैं जो मुझे वेबफॉर्म के बारे में पागल बनाती हैं और अंततः मुझे एमवीसी की ओर धकेलती हैं। – akousmata
- 1. डेटाग्रिड
- 2. डेटाग्रिड
- 3. डेटाग्रिड
- 4. डेटाग्रिड
- 5. डेटाग्रिड
- 6. डेटाग्रिड
- 7. डेटाग्रिड
- 8. डेटाग्रिड
- 9. डेटाग्रिड
- 10. wpf डेटाग्रिड
- 11. wpf डेटाग्रिड
- 12. डेटाग्रिड व्यू
- 13. सिल्वरलाइट डेटाग्रिड
- 14. डेटाग्रिड हेडर
- 15. डेटाग्रिड व्यू
- 16. डेटाग्रिड (WPF)
- 17. WPF डेटाग्रिड
- 18. डब्ल्यूपीएफ: डेटाग्रिड
- 19. डेटाग्रिड व्यू
- 20. डेटाग्रिड व्यू
- 21. सिल्वरलाइट डेटाग्रिड
- 22. डेटाग्रिड सेल
- 23. डेटाग्रिड-WPF
- 24. डेटाग्रिड व्यू
- 25. डेटाग्रिड के सेल
- 26. डेटाग्रिड व्यू सेल
- 27. wpf डेटाग्रिड सेल शैली के साथ समस्या
- 28. खाली पंक्तियों के साथ डेटाग्रिड भरें
- 29. एएसपी.नेट में डेटाग्रिड और ग्रिड व्यू के बीच का अंतर?
- 30. सी # डेटाग्रिड व्यू
यह ग्रिडव्यू करता है लेकिन डेटाग्रिड नहीं करता है। –
यह सिर्फ एक विचार है। "नियंत्रण एडाप्टर का उपयोग करें" के बराबर लेकिन नमूने के साथ। क्योंकि यह पैक खुला स्रोत है। और नहीं। –