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
15 using System.Globalization;
\r
17 using System.Web.UI;
\r
19 namespace System.Web.UI.WebControls
\r
21 public sealed class RepeatInfo
\r
23 private bool outerTableImp;
\r
24 private int repeatColumns;
\r
25 private RepeatDirection repeatDirection;
\r
26 private RepeatLayout repeatLayout;
\r
30 outerTableImp = false;
\r
32 repeatDirection = RepeatDirection.Vertical;
\r
33 repeatLayout = RepeatLayout.Table;
\r
36 public bool OuterTableImplied
\r
40 return outerTableImp;
\r
44 outerTableImp = value;
\r
48 public int RepeatColumns
\r
52 return repeatColumns;
\r
56 repeatColumns = value;
\r
60 public RepeatDirection RepeatDirection
\r
64 return repeatDirection;
\r
68 if(!Enum.IsDefined(typeof(RepeatDirection), value))
\r
69 throw new ArgumentException();
\r
70 repeatDirection = value;
\r
74 public RepeatLayout RepeatLayout
\r
78 return repeatLayout;
\r
82 if(!Enum.IsDefined(typeof(RepeatLayout), value))
\r
83 throw new ArgumentException();
\r
84 repeatLayout = value;
\r
88 public void RenderRepeater(HtmlTextWriter writer, IRepeatInfoUser user, Style controlStyle, WebControl baseControl)
\r
90 if(RepeatDirection == RepeatDirection.Vertical)
\r
92 DoVerticalRendering(writer, user, controlStyle, baseControl);
\r
95 DoHorizontalRendering(writer, user, controlStyle, baseControl);
\r
99 private void DoVerticalRendering(HtmlTextWriter writer, IRepeatInfoUser user, Style controlStyle, WebControl baseControl)
\r
101 int total = user.RepeatedItemCount;
\r
104 if(repeatColumns == 0 || repeatColumns==1)
\r
110 colsCount = repeatColumns;
\r
111 rowsCount = (total + repeatColumns - 1) / repeatColumns;
\r
112 if(rowsCount ==0 && total != 0)
\r
118 WebControl ctrl = null;
\r
119 bool isTable = true;
\r
120 bool hasSeps = user.HasSeparators;
\r
123 if(RepeatLayout == RepeatLayout.Table)
\r
125 ctrl = new Table();
\r
128 ctrl = new WebControl(HtmlTextWriterTag.Span);
\r
135 ctrl.ID = baseControl.ClientID;
\r
136 ctrl.CopyBaseAttributes(baseControl);
\r
137 ctrl.ApplyStyle(controlStyle);
\r
138 ctrl.RenderBeginTag(writer);
\r
147 writer.RenderBeginTag(HtmlTextWriterTag.Tr);
\r
150 colSpan = rowsCount;
\r
152 colSpan += rowsCount;
\r
153 writer.AddAttribute(HtmlTextWriterAttribute.Colspan, colSpan.ToString(NumberFormatInfo.InvariantInfo));
\r
155 itemStyle = user.GetItemStyle(ListItemType.Header, -1);
\r
156 if(itemStyle != null)
\r
158 itemStyle.AddAttributesToRender(writer);
\r
160 writer.RenderBeginTag(HtmlTextWriterTag.Td);
\r
162 user.RenderItem(ListItemType.Header, -1, this, writer);
\r
165 writer.RenderEndTag();
\r
166 writer.RenderEndTag();
\r
171 writer.WriteFullBeginTag("br");
\r
179 while(rowIndex < rowsCount)
\r
182 writer.RenderBeginTag(HtmlTextWriterTag.Tr);
\r
184 while(colIndex < colsCount)
\r
186 index = rowIndex + colIndex * rowsCount;
\r
191 itemStyle = user.GetItemStyle(ListItemType.Item, index);
\r
192 if(itemStyle != null)
\r
194 itemStyle.AddAttributesToRender(writer);
\r
196 writer.RenderBeginTag(HtmlTextWriterTag.Td);
\r
198 user.RenderItem(ListItemType.Item, index, this, writer);
\r
200 writer.RenderEndTag();
\r
201 if(hasSeps && index != (total - 1))
\r
205 writer.RenderEndTag();
\r
206 writer.RenderBeginTag(HtmlTextWriterTag.Tr);
\r
209 writer.WriteFullBeginTag("br");
\r
213 itemStyle = user.GetItemStyle(ListItemType.Separator, index);
\r
214 if(itemStyle != null)
\r
215 itemStyle.AddAttributesToRender(writer);
\r
216 writer.RenderBeginTag(HtmlTextWriterTag.Td);
\r
219 user.RenderItem(ListItemType.Separator, index, this, writer);
\r
221 writer.RenderEndTag();
\r
227 writer.RenderEndTag();
\r
229 if(rowIndex != (rowsCount - 1) || (user.HasFooter && !outerTableImp))
\r
230 writer.WriteFullBeginTag("br");
\r
237 writer.RenderBeginTag(HtmlTextWriterTag.Tr);
\r
240 writer.AddAttribute(HtmlTextWriterAttribute.Colspan, colSpan.ToString(NumberFormatInfo.InvariantInfo));
\r
242 itemStyle = user.GetItemStyle(ListItemType.Footer, -1);
\r
243 if(itemStyle != null)
\r
245 itemStyle.AddAttributesToRender(writer);
\r
247 writer.RenderBeginTag(HtmlTextWriterTag.Td);
\r
249 user.RenderItem(ListItemType.Footer, -1, this, writer);
\r
252 writer.RenderEndTag();
\r
253 writer.RenderEndTag();
\r
258 ctrl.RenderEndTag(writer);
\r
262 private void DoHorizontalRendering (HtmlTextWriter writer,
\r
263 IRepeatInfoUser user,
\r
264 Style controlStyle,
\r
265 WebControl baseControl)
\r
267 /* Based on DoVerticalRendering */
\r
268 int total = user.RepeatedItemCount;
\r
271 WebControl ctrl = null;
\r
272 bool isTable = true;
\r
273 bool hasSeps = user.HasSeparators;
\r
274 if (!outerTableImp){
\r
275 isTable = (RepeatLayout == RepeatLayout.Table);
\r
276 ctrl = (isTable) ? new Table () : new WebControl (HtmlTextWriterTag.Span);
\r
277 ctrl.ID = baseControl.ClientID;
\r
278 ctrl.CopyBaseAttributes (baseControl);
\r
279 ctrl.ApplyStyle (controlStyle);
\r
280 ctrl.RenderBeginTag (writer);
\r
285 if (user.HasHeader){
\r
287 writer.RenderBeginTag (HtmlTextWriterTag.Tr);
\r
288 if (rowsCount != 1){
\r
289 colSpan = rowsCount;
\r
291 colSpan += rowsCount;
\r
292 writer.AddAttribute (HtmlTextWriterAttribute.Colspan,
\r
293 colSpan.ToString (NumberFormatInfo.InvariantInfo));
\r
295 itemStyle = user.GetItemStyle (ListItemType.Header, -1);
\r
296 if (itemStyle != null)
\r
297 itemStyle.AddAttributesToRender (writer);
\r
298 writer.RenderBeginTag (HtmlTextWriterTag.Td);
\r
301 user.RenderItem (ListItemType.Header, -1, this, writer);
\r
304 writer.RenderEndTag();
\r
305 writer.RenderEndTag();
\r
306 } else if (!outerTableImp)
\r
307 writer.WriteFullBeginTag ("br");
\r
310 for (int index = 0; index < total; index++){
\r
311 if (isTable && index == 0)
\r
312 writer.RenderBeginTag (HtmlTextWriterTag.Tr);
\r
315 itemStyle = user.GetItemStyle (ListItemType.Item, index);
\r
316 if (itemStyle != null)
\r
317 itemStyle.AddAttributesToRender(writer);
\r
318 writer.RenderBeginTag(HtmlTextWriterTag.Td);
\r
321 user.RenderItem(ListItemType.Item, index, this, writer);
\r
323 writer.RenderEndTag ();
\r
325 if (hasSeps && index != (total - 1)){
\r
327 itemStyle = user.GetItemStyle (ListItemType.Separator, index);
\r
328 if (itemStyle != null)
\r
329 itemStyle.AddAttributesToRender (writer);
\r
330 writer.RenderBeginTag (HtmlTextWriterTag.Td);
\r
332 user.RenderItem (ListItemType.Separator, index, this, writer);
\r
334 writer.RenderEndTag ();
\r
338 if (colsCount == repeatColumns) {
\r
340 writer.RenderEndTag ();
\r
341 writer.RenderBeginTag (HtmlTextWriterTag.Tr);
\r
343 else if (rowsCount < total)
\r
344 writer.WriteFullBeginTag ("br");
\r
348 if (index == (total - 1)) {
\r
350 writer.RenderEndTag ();
\r
351 else if (rowsCount < total)
\r
352 writer.WriteFullBeginTag ("br");
\r
356 if (user.HasFooter){
\r
358 writer.RenderBeginTag (HtmlTextWriterTag.Tr);
\r
359 if (colsCount != 1)
\r
360 writer.AddAttribute (HtmlTextWriterAttribute.Colspan,
\r
361 colSpan.ToString(NumberFormatInfo.InvariantInfo));
\r
363 itemStyle = user.GetItemStyle (ListItemType.Footer, -1);
\r
364 if(itemStyle != null)
\r
365 itemStyle.AddAttributesToRender (writer);
\r
366 writer.RenderBeginTag (HtmlTextWriterTag.Td);
\r
368 user.RenderItem (ListItemType.Footer, -1, this, writer);
\r
370 writer.RenderEndTag ();
\r
371 writer.RenderEndTag ();
\r
376 ctrl.RenderEndTag(writer);
\r