// Material sourced from the bluePortal project (http://blueportal.codeplex.com). // Licensed under the Microsoft Public License (available at http://www.opensource.org/licenses/ms-pl.html). using System; using System.Data; using System.Collections; using System.Configuration; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; namespace CSSFriendly { public class GridViewAdapter : System.Web.UI.WebControls.Adapters.WebControlAdapter { private WebControlAdapterExtender _extender = null; private WebControlAdapterExtender Extender { get { if (((_extender == null) && (Control != null)) || ((_extender != null) && (Control != _extender.AdaptedControl))) { _extender = new WebControlAdapterExtender(Control); } System.Diagnostics.Debug.Assert(_extender != null, "CSS Friendly adapters internal error", "Null extender instance"); return _extender; } } /// /////////////////////////////////////////////////////////////////////////////// /// PROTECTED protected override void OnInit(EventArgs e) { base.OnInit(e); if (Extender.AdapterEnabled) { RegisterScripts(); } } protected override void RenderBeginTag(HtmlTextWriter writer) { if (Extender.AdapterEnabled) { Extender.RenderBeginTag(writer, "AspNet-GridView"); } else { base.RenderBeginTag(writer); } } protected override void RenderEndTag(HtmlTextWriter writer) { if (Extender.AdapterEnabled) { Extender.RenderEndTag(writer); } else { base.RenderEndTag(writer); } } protected override void RenderContents(HtmlTextWriter writer) { if (Extender.AdapterEnabled) { GridView gridView = Control as GridView; if (gridView != null) { writer.Indent++; WritePagerSection(writer, PagerPosition.Top); writer.WriteLine(); writer.WriteBeginTag("table"); writer.WriteAttribute("id", gridView.ClientID); writer.WriteAttribute("cellpadding", "0"); writer.WriteAttribute("cellspacing", "0"); writer.WriteAttribute("summary", Control.ToolTip); writer.Write(HtmlTextWriter.TagRightChar); writer.Indent++; ArrayList rows = new ArrayList(); GridViewRowCollection gvrc = null; ///////////////////// HEAD ///////////////////////////// rows.Clear(); if (gridView.ShowHeader && (gridView.HeaderRow != null)) { rows.Add(gridView.HeaderRow); } gvrc = new GridViewRowCollection(rows); WriteRows(writer, gridView, gvrc, "thead"); ///////////////////// FOOT ///////////////////////////// rows.Clear(); if (gridView.ShowFooter && (gridView.FooterRow != null)) { rows.Add(gridView.FooterRow); } gvrc = new GridViewRowCollection(rows); WriteRows(writer, gridView, gvrc, "tfoot"); ///////////////////// BODY ///////////////////////////// WriteRows(writer, gridView, gridView.Rows, "tbody"); //////////////////////////////////////////////////////// writer.Indent--; writer.WriteLine(); writer.WriteEndTag("table"); WriteEmptyTextSection(writer); WritePagerSection(writer, PagerPosition.Bottom); writer.Indent--; writer.WriteLine(); } } else { base.RenderContents(writer); } } /// /////////////////////////////////////////////////////////////////////////////// /// PRIVATE private void RegisterScripts() { } private void WriteRows(HtmlTextWriter writer, GridView gridView, GridViewRowCollection rows, string tableSection) { if (rows.Count > 0) { writer.WriteLine(); writer.WriteBeginTag(tableSection); writer.Write(HtmlTextWriter.TagRightChar); writer.Indent++; foreach (GridViewRow row in rows) { writer.WriteLine(); writer.WriteBeginTag("tr"); string className = GetRowClass(gridView, row); if (!String.IsNullOrEmpty(className)) { writer.WriteAttribute("class", className); } writer.Write(HtmlTextWriter.TagRightChar); writer.Indent++; int i = 0; foreach (TableCell cell in row.Cells) { if (!gridView.Columns[i++].Visible) continue; DataControlFieldCell fieldCell = cell as DataControlFieldCell; if(tableSection == "tbody" && fieldCell != null && (fieldCell.Text.Trim() == "") && fieldCell.Controls.Count == 0) cell.Controls.Add(new LiteralControl("