public void AddFromReader(OleDbDataReader reader, bool addSpace) { do { if (reader.HasRows) { HtmlGenericControl resultSetDiv = CreateDiv("ResultSet"); _container.Controls.Add(resultSetDiv); int headerColumn = reader.GetColumnIndex("Header"); string lastHeader = null; int subheaderColumn = reader.GetColumnIndex("Subheader"); string lastSubHeader = null; int lastColumn = reader.FieldCount - 1; for (int i = 0; i < 2; ++i) { if (lastColumn == headerColumn || lastColumn == subheaderColumn) { lastColumn -= 1; } } while (reader.Read()) { HtmlGenericControl rowSetDiv = CreateDiv("RowSet"); resultSetDiv.Controls.Add(rowSetDiv); bool headerAdded = false; bool subheaderAdded = false; if (headerColumn >= 0 && !reader.IsDBNull(headerColumn)) { string header = reader.GetValue(headerColumn).ToString(); headerAdded = header != lastHeader; if (headerAdded) { HtmlGenericControl headerDiv = CreateDiv("RowSetHeader", header); rowSetDiv.Controls.Add(headerDiv); lastHeader = header; } } if (subheaderColumn >= 0 && !reader.IsDBNull(subheaderColumn)) { string subheader = reader.GetValue(subheaderColumn).ToString(); subheaderAdded = subheader != lastSubHeader; if (subheaderAdded) { if (headerAdded && addSpace) { AddSpace(rowSetDiv, "Space2"); } HtmlGenericControl subheaderDiv = CreateDiv("RowSetSubheader", subheader); rowSetDiv.Controls.Add(subheaderDiv); lastSubHeader = subheader; } } if (lastColumn < 0) { if (addSpace) { AddSpace(rowSetDiv, "Space2"); } } else { if ((headerAdded || subheaderAdded) && addSpace) { AddSpace(rowSetDiv, "Space2"); } for (int i = 0; i < reader.FieldCount; ++i) { if (i != headerColumn && i != subheaderColumn) { HtmlGenericControl valueSetDiv = CreateDiv("ValueSet"); rowSetDiv.Controls.Add(valueSetDiv); HtmlGenericControl labelDiv = CreateDiv("Label", reader.GetName(i)); valueSetDiv.Controls.Add(labelDiv); if (addSpace) { HtmlGenericControl separatorDiv = CreateDiv("Separator", ""); valueSetDiv.Controls.Add(separatorDiv); } HtmlGenericControl valueDiv = CreateValueDiv(!reader.IsDBNull(i) ? reader.GetValue(i) : null); valueSetDiv.Controls.Add(valueDiv); if (i < lastColumn && addSpace) { AddSpace(rowSetDiv, "Space1"); } } } if (addSpace) { AddSpace(rowSetDiv, "Space4"); } } } } } while (reader.NextResult()); }