2 * Namespace: System.Web.UI.WebControls
\r
5 * Author: Gaurav Vaish
\r
6 * Maintainer: gvaish@iitk.ac.in
\r
7 * Contact: <my_scripts2001@yahoo.com>, <gvaish@iitk.ac.in>
\r
8 * Implementation: yes
\r
11 * (C) Gaurav Vaish (2002)
\r
16 using System.Web.UI;
\r
18 namespace System.Web.UI.WebControls
\r
20 public sealed class RepeatInfo
\r
22 private bool outerTableImp;
\r
23 private int repeatColumns;
\r
24 private RepeatDirection repeatDirection;
\r
25 private RepeatLayout repeatLayout;
\r
29 outerTableImp = false;
\r
31 repeatDirection = RepeatDirection.Vertical;
\r
32 repeatLayout = RepeatLayout.Table;
\r
35 public bool OuterTableImplied
\r
39 return outerTableImp;
\r
43 outerTableImp = value;
\r
47 public int RepeatColumns
\r
51 return repeatColumns;
\r
55 repeatColumns = value;
\r
59 public RepeatDirection RepeatDirection
\r
63 return repeatDirection;
\r
67 if(!Enum.IsDefined(typeof(RepeatDirection), value))
\r
68 throw new ArgumentException();
\r
69 repeatDirection = value;
\r
73 public RepeatLayout RepeatLayout
\r
77 return repeatLayout;
\r
81 if(!Enum.IsDefined(typeof(RepeatLayout), value))
\r
82 throw new ArgumentException();
\r
83 repeatLayout = value;
\r
87 public void RenderRepeater(HtmlTextWriter writer, IRepeatInfoUser user, Style controlStyle, WebControl baseControl)
\r
89 if(RepeatDirection == RepeatDirection.Vertical)
\r
91 DoVerticalRendering(writer, user, controlStyle, basecontrol);
\r
94 DoHorizontalRendering(writer, user, controlStyle, basecontrol);
\r
98 private void DoVerticalRendering(HtmlTextWriter writer, IRepeatInfoUser user, Style controlStyle, WebControl baseControl)
\r
100 int total = user.RepeatedItemCount;
\r
103 if(repeatColumns == 0 || repeatColumns==1)
\r
109 colsCount = repeatColumns;
\r
110 rowsCount = (total + repeatColumns - 1) / repeatColumns;
\r
111 if(rowsCount ==0 && total != 0)
\r
117 WebControl ctrl = null;
\r
118 bool isTable = true;
\r
119 bool hasSeps = user.HasSeparators;
\r
120 if(!outerTableImpl)
\r
122 if(RepeatLayout == RepeatLayout.Table)
\r
124 ctrl = new Table();
\r
127 ctrl = new WebControl(HtmlTextWriterTag.Span);
\r
134 ctrl.ID = baseControl.ClientID;
\r
135 ctrl.CopyBaseAttributes(baseControl);
\r
136 ctrl.ApplyControlStyle(controlStyle);
\r
137 ctrl.RenderBeginTag(writer);
\r
146 writer.RenderBeginTag(HtmlTextWriterTag.Tr);
\r
149 colSpan = rowsCount;
\r
151 colSpan += rowsCount;
\r
152 writer.AddAttribute(HtmlTextWriterAttribute.Colspan, colSpan.ToString(NumberFormatInfo.InvariantInfo));
\r
154 itemStyle = user.GetItemStyle(ListItemType.Header, -1);
\r
155 if(itemStyle != null)
\r
157 itemStyle.AddAttributesToRender(writer);
\r
159 writer.RenderBeginTag(HtmlTextWriterTag.Td);
\r
161 user.RenderItem(ListItemType.Header, -1, this, writer);
\r
164 writer.RenderEndTag();
\r
165 writer.RenderEndTag();
\r
170 writer.WriteFullBeginTag("br");
\r
178 while(rowIndex < rowsCount)
\r
181 writer.RenderBeginTag(HtmlTextWriterTag.Tr);
\r
183 while(colIndex < colCount)
\r
185 index = rowIndex + colIndex * rowsCount;
\r
190 itemStyle = user.GetItemStyle(ListItemType.Item, index);
\r
191 if(itemStyle != null)
\r
193 itemStyle.AddAttributesToRender(writer);
\r
195 writer.RenderBeginTag(HtmlTextWriterTag.Td);
\r
197 user.RenderItem(ListItemType.Item, index, this, writer);
\r
199 writer.RenderEndTag();
\r
200 if(hasSeps && index != (total - 1))
\r
204 writer.RenderEndTag();
\r
205 writer.RenderBeginTag(HtmlTextWriterTag.Tr);
\r
208 writer.WriteFullBeginTag("br");
\r
212 itemStyle = user.GetItemStyle(ListItemType.Separator, index);
\r
213 if(itemStyle != null)
\r
214 itemStyle.AddAttributesToRender(writer);
\r
215 writer.RenderBeginTag(HtmlTextWriterTag.Td);
\r
218 user.RenderItem(ListItemType.Separator, index, this, writer);
\r
220 writer.RenderEndTag();
\r
226 writer.RenderEndTag();
\r
228 if(rowIndex != (rowCount - 1) || (user.hasFooter && !outerTableImp))
\r
229 writer.WriteFullBeginTag("br");
\r
236 writer.RenderBeginTag(HtmlTextWriterTag.Tr);
\r
239 writer.AddAttribute(HtmlTextWriterAttribute.Colspan, colSpan.ToString(NumberFormatInfo.InvariantInfo));
\r
241 itemStyle = user.GetItemStyle(ListItemType.Footer, -1);
\r
242 if(itemStyle != null)
\r
244 itemStyle.AddAttributesToRender(writer);
\r
246 writer.RenderBeginTag(HtmlTextWriterTag.Td);
\r
248 user.RenderItem(ListItemType.Footer, -1, this, writer);
\r
251 writer.RenderEndTag();
\r
252 writer.RenderEndTag();
\r
257 ctrl.RenderEndTag(writer);
\r
261 private void DoHorizontalRendering(HtmlTextWriter writer, IRepeatInfoUser user, Style controlStyle, WebControl baseControl)
\r