using System; using System.Data; using System.Configuration; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; using System.Collections.Generic; namespace Estore { public class ProductNavigation : WebBlocksControl { private string _CssClass = ""; public string CssClass { get { return _CssClass; } set { _CssClass = value; } } private string _UnselectedItemCssClass = ""; public string UnselectedItemCssClass { get { return _UnselectedItemCssClass; } set { _UnselectedItemCssClass = value; } } private string _IndentedItemCssClass = ""; public string IndentedItemCssClass { get { return _IndentedItemCssClass; } set { _IndentedItemCssClass = value; } } private string _SelectedItemCssClass = ""; public string SelectedItemCssClass { get { return _SelectedItemCssClass; } set { _SelectedItemCssClass = value; } } private int _SelectedCategoryID = 0; public int SelectedCategoryID { get { return _SelectedCategoryID; } set { _SelectedCategoryID = value; } } private bool _IncludeBase = false; public bool IncludeBase { get { return _IncludeBase; } set { _IncludeBase = value; } } protected override void Render(HtmlTextWriter writer) { DataRow drSelectedCategory; DataView dv = Database.Categories_GetTwoLevelsDeep().DefaultView; writer.Write(""); if (_SelectedCategoryID > 0) { // grab the selected category row dv.RowFilter = "CategoryId=" + _SelectedCategoryID.ToString(); drSelectedCategory = dv[0].Row; // grab all of it's subcategories dv.RowFilter = "ParentCategoryID=" + _SelectedCategoryID; DataTable dtSubCategories = dv.ToTable(); // grab all of it's siblings dv.RowFilter = "ParentCategoryID=" + drSelectedCategory["ParentCategoryId"].ToString(); DataTable dtSiblings = dv.ToTable(); bool NoChildren = (dtSubCategories.Rows.Count == 0); /* else if (IncludeBase && !NoChildren) { writer.Write("
"); writer.Write("Back to Products"); writer.Write("

"); } */ // if there are no subcategories... switch down a level if (NoChildren && drSelectedCategory["ParentParentId"] != DBNull.Value) { // if we are showing the base, then we display a back button when the parent is 0, otherwise, no string ParentName = ((int)drSelectedCategory["ParentParentId"] != 0 ? (string)drSelectedCategory["ParentParentName"] : "Store"); writer.Write("
"); writer.Write("Back to "); writer.Write(ParentName); writer.Write(""); writer.Write("

"); // make the current siblings become the children dtSubCategories = dtSiblings; // and now make the current categories' parent's parent become the new siblings dv.RowFilter = "ParentCategoryID=" + drSelectedCategory["ParentParentId"].ToString(); dtSiblings = dv.ToTable(); // render this new stuff foreach (DataRow dr in dtSiblings.Rows) { int SiblingID = (int)dr["CategoryID"]; if (SiblingID == (int)drSelectedCategory["ParentCategoryId"]) { writer.Write("
"); writer.Write(""); writer.Write((string)dr["CategoryName"]); writer.Write(""); // this is the selected category, so show it's children, if it has them if (dtSubCategories.Rows.Count > 0) { writer.Write("
"); foreach (DataRow drSubCategory in dtSubCategories.Rows) { writer.Write(""); } writer.Write("
"); } writer.Write("
"); } else { writer.Write("
"); writer.Write(""); writer.Write((string)dr["CategoryName"]); writer.Write(""); writer.Write("
"); } } } else { if ((int)drSelectedCategory["ParentCategoryId"] != 0) { string ParentName = (string)drSelectedCategory["ParentName"]; writer.Write("
"); writer.Write("Back to "); writer.Write(ParentName); writer.Write(""); writer.Write("

"); } // render everything foreach (DataRow dr in dtSiblings.Rows) { int SiblingID = (int)dr["CategoryID"]; if (SiblingID == (int)drSelectedCategory["CategoryID"]) { writer.Write("
"); writer.Write(""); writer.Write((string)dr["CategoryName"]); writer.Write(""); // this is the selected category, so show it's children, if it has them if (dtSubCategories.Rows.Count > 0) { writer.Write("
"); foreach (DataRow drSubCategory in dtSubCategories.Rows) { writer.Write(""); } writer.Write("
"); } writer.Write("
"); } else { writer.Write("
"); writer.Write(""); writer.Write((string)dr["CategoryName"]); writer.Write(""); writer.Write("
"); } } } } else { dv.RowFilter = "ParentCategoryId=0"; foreach (DataRowView drv in dv) { writer.Write(""); writer.Write(""); writer.Write(""); writer.Write(""); } } writer.Write("
"); writer.Write(""); writer.Write(""); writer.Write((string)drv["CategoryName"]); writer.Write("
"); base.Render(writer); } } }