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 = false;
\r
120 bool hasSeps = user.HasSeparators;
\r
123 if(RepeatLayout == RepeatLayout.Table)
\r
125 ctrl = new Table();
\r
129 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 = colsCount;
\r
152 colSpan += colsCount;
\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 int diff = colsCount - (rowsCount*colsCount - total);
\r
181 while(rowIndex < rowsCount)
\r
184 writer.RenderBeginTag(HtmlTextWriterTag.Tr);
\r
186 while(colIndex < colsCount)
\r
188 if (rowIndex == rowsCount-1 && colIndex >= diff)
\r
191 if (colIndex < diff)
\r
192 index = rowIndex + colIndex * rowsCount;
\r
194 index = rowIndex + colIndex * (rowsCount-1) + diff;
\r
200 itemStyle = user.GetItemStyle(ListItemType.Item, index);
\r
201 if(itemStyle != null)
\r
203 itemStyle.AddAttributesToRender(writer);
\r
205 writer.RenderBeginTag(HtmlTextWriterTag.Td);
\r
207 user.RenderItem(ListItemType.Item, index, this, writer);
\r
209 writer.RenderEndTag();
\r
210 if(hasSeps && index != (total - 1))
\r
214 writer.RenderEndTag();
\r
215 writer.RenderBeginTag(HtmlTextWriterTag.Tr);
\r
218 writer.WriteFullBeginTag("br");
\r
222 itemStyle = user.GetItemStyle(ListItemType.Separator, index);
\r
223 if(itemStyle != null)
\r
224 itemStyle.AddAttributesToRender(writer);
\r
225 writer.RenderBeginTag(HtmlTextWriterTag.Td);
\r
227 user.RenderItem(ListItemType.Separator, index, this, writer);
\r
229 writer.RenderEndTag();
\r
235 writer.RenderEndTag();
\r
237 if((rowIndex != (rowsCount - 1) || user.HasFooter) && !outerTableImp)
\r
238 writer.WriteFullBeginTag("br");
\r
245 writer.RenderBeginTag(HtmlTextWriterTag.Tr);
\r
248 writer.AddAttribute(HtmlTextWriterAttribute.Colspan, colSpan.ToString(NumberFormatInfo.InvariantInfo));
\r
250 itemStyle = user.GetItemStyle(ListItemType.Footer, -1);
\r
251 if(itemStyle != null)
\r
253 itemStyle.AddAttributesToRender(writer);
\r
255 writer.RenderBeginTag(HtmlTextWriterTag.Td);
\r
257 user.RenderItem(ListItemType.Footer, -1, this, writer);
\r
260 writer.RenderEndTag();
\r
261 writer.RenderEndTag();
\r
266 ctrl.RenderEndTag(writer);
\r
270 private void DoHorizontalRendering (HtmlTextWriter writer,
\r
271 IRepeatInfoUser user,
\r
272 Style controlStyle,
\r
273 WebControl baseControl)
\r
275 /* Based on DoVerticalRendering */
\r
276 int total = user.RepeatedItemCount;
\r
279 WebControl ctrl = null;
\r
280 bool isTable = true;
\r
281 bool hasSeps = user.HasSeparators;
\r
282 if (!outerTableImp){
\r
283 isTable = (RepeatLayout == RepeatLayout.Table);
\r
284 ctrl = (isTable) ? new Table () : new WebControl (HtmlTextWriterTag.Span);
\r
285 ctrl.ID = baseControl.ClientID;
\r
286 ctrl.CopyBaseAttributes (baseControl);
\r
287 ctrl.ApplyStyle (controlStyle);
\r
288 ctrl.RenderBeginTag (writer);
\r
293 if (user.HasHeader){
\r
295 writer.RenderBeginTag (HtmlTextWriterTag.Tr);
\r
296 if (colsCount != 1){
\r
297 colSpan = colsCount;
\r
299 colSpan += colsCount;
\r
300 writer.AddAttribute (HtmlTextWriterAttribute.Colspan,
\r
301 colSpan.ToString (NumberFormatInfo.InvariantInfo));
\r
303 itemStyle = user.GetItemStyle (ListItemType.Header, -1);
\r
304 if (itemStyle != null)
\r
305 itemStyle.AddAttributesToRender (writer);
\r
306 writer.RenderBeginTag (HtmlTextWriterTag.Td);
\r
309 user.RenderItem (ListItemType.Header, -1, this, writer);
\r
312 writer.RenderEndTag();
\r
313 writer.RenderEndTag();
\r
314 } else if (repeatColumns < user.RepeatedItemCount)
\r
315 writer.WriteFullBeginTag ("br");
\r
318 for (int index = 0; index < total; index++){
\r
319 if (isTable && index == 0)
\r
320 writer.RenderBeginTag (HtmlTextWriterTag.Tr);
\r
323 itemStyle = user.GetItemStyle (ListItemType.Item, index);
\r
324 if (itemStyle != null)
\r
325 itemStyle.AddAttributesToRender(writer);
\r
326 writer.RenderBeginTag(HtmlTextWriterTag.Td);
\r
329 user.RenderItem(ListItemType.Item, index, this, writer);
\r
331 writer.RenderEndTag ();
\r
333 if (hasSeps && index != (total - 1)){
\r
335 itemStyle = user.GetItemStyle (ListItemType.Separator, index);
\r
336 if (itemStyle != null)
\r
337 itemStyle.AddAttributesToRender (writer);
\r
338 writer.RenderBeginTag (HtmlTextWriterTag.Td);
\r
340 user.RenderItem (ListItemType.Separator, index, this, writer);
\r
342 writer.RenderEndTag ();
\r
346 if (colsCount == repeatColumns) {
\r
348 writer.RenderEndTag ();
\r
349 writer.RenderBeginTag (HtmlTextWriterTag.Tr);
\r
351 else if (rowsCount < total)
\r
352 writer.WriteFullBeginTag ("br");
\r
356 if (index == (total - 1)) {
\r
358 writer.RenderEndTag ();
\r
359 else if (rowsCount < total)
\r
360 writer.WriteFullBeginTag ("br");
\r
364 if (user.HasFooter){
\r
366 writer.RenderBeginTag (HtmlTextWriterTag.Tr);
\r
367 if (colsCount != 1)
\r
368 writer.AddAttribute (HtmlTextWriterAttribute.Colspan,
\r
369 colSpan.ToString(NumberFormatInfo.InvariantInfo));
\r
371 itemStyle = user.GetItemStyle (ListItemType.Footer, -1);
\r
372 if(itemStyle != null)
\r
373 itemStyle.AddAttributesToRender (writer);
\r
374 writer.RenderBeginTag (HtmlTextWriterTag.Td);
\r
376 user.RenderItem (ListItemType.Footer, -1, this, writer);
\r
378 writer.RenderEndTag ();
\r
379 writer.RenderEndTag ();
\r
384 ctrl.RenderEndTag(writer);
\r