private void GenerateHtmlInOneRow <TKey, TTable, TDataContext, TRow>(StringBuilder sb, string cssClass, string cssClass0, string cssClass1, GenearetHtml handler, BaseDataSourceView <TKey, TTable, TDataContext, TRow> view, TTable currentRow, SetDataRow <TRow> setDataRowDelegate, int countChilds, int allCountChilds, int level) where TKey : struct where TTable : class where TDataContext : DataContext, new() where TRow : BaseRow, new() { string id = view.GetStringID(currentRow); if (_loadedIDs.ContainsKey(id)) { UsePostBackForChilds = false; GenerateHtmlInOneRow(sb, cssClass, null, handler); } else if (( (LoadTreeCount >= allCountChilds && _sumCounts < MaxSumCounts) || countChilds <= MinCountNotCheckLoad ) && level < MaxLevelTreeLoad && countChilds > 0) { _sumCounts += countChilds; UsePostBackForChilds = false; GenerateHtmlInOneRow(sb, cssClass, null, handler); ChildsID.Add(id); _loadedIDs.Add(id, true); var data = view.GetDataByRefParent(currentRow); bool class0 = true; PropertyInfo itemPropertyInfo = null; foreach (var row in data) { if (itemPropertyInfo == null) { itemPropertyInfo = row.GetType().GetProperty("Item"); } var count = row.CountChildsData(); setDataRowDelegate(row); GenerateHtmlInOneRow(sb, class0 ? cssClass0 : cssClass1, cssClass0, cssClass1, handler, view, (TTable)itemPropertyInfo.GetValue(row, null), setDataRowDelegate, count, allCountChilds * count, level + 1); class0 = !class0; } ChildsID.RemoveAt(ChildsID.Count - 1); } else { UsePostBackForChilds = true; GenerateHtmlInOneRow(sb, cssClass, null, handler); } }
private void GenerateHtmlInOneRow(StringBuilder sb, string cssClass, string cssClassNotSelected, GenearetHtml handler) { int colSpan = 0; sb.AppendLine(); int tabCount = ChildsID != null ? ChildsID.Count : 0; sb.Append('\t', tabCount); sb.AppendFormat("<tr class=\"{0}\" notSelectedCSS=\"{1}\"", cssClass, cssClassNotSelected); if (ChildsID != null) { if (ChildsID.Count > 0) { sb.Append(" style=\"display:none\""); } sb.AppendFormat(" level=\"{0}\" parentID=\"{1}\"", ChildsID.Count, ChildsID.LastOrDefault()); /*int i = 0; * foreach (var childID in ChildsID) * { * sb.Append(" level"); * sb.Append(i); * sb.Append("=\""); * sb.Append(childID); * i++; * }*/ } sb.Append(">"); sb.AppendLine(); foreach (var column in Columns.Where(p => p.Visible && (p.VisiblePermissions == null || UserRoles.IsInAnyRoles(p.VisiblePermissions)))) { colSpan--; if (colSpan > 0 || column.ColSpan == 0) { continue; } var rowSpan = column.GetRowSpan(); if (rowSpan < 0) { continue; } var style = column.GetStyle(); colSpan = column.ColSpan; sb.AppendLine(); sb.Append('\t', tabCount + 1); sb.Append("<td"); if (colSpan > 1) { sb.Append(" colspan="); sb.Append(colSpan); } if (rowSpan > 1) { sb.Append(" rowspan="); sb.Append(rowSpan); } if (!string.IsNullOrEmpty(style)) { sb.Append(" style=\""); sb.Append(style); sb.Append("\""); } sb.Append(">"); handler(sb, column); sb.Append("</td>"); sb.AppendLine(); } sb.AppendLine(); sb.Append('\t', tabCount); sb.AppendLine("</tr>"); }