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, IRepeatInfoUser user, Style controlStyle, WebControl baseControl)
\r