/*表结构*/ /* 表一 table_大类(id,name) 表二 table_小类(id,name,cat_id) 此表中cat_id是表table_大类的id */ /*效果*/ /* 大类1 大类2 小类19个顺序列出 小类19个顺序列出 大类3 大类4 小类19个顺序列出 小类19个顺序列出 大类5 大类6 小类19个顺序列出 小类19个顺序列出 . . . . */ /* 方法GetList是嵌套循环 方法GetList2是单循环 二者结果相同 方法GetList2优于方法GetList, 原因是单循环,只读一次数据库, 而GetList读数据的次数是 table_大类的记录+1 [解释:读一次表table_大类,此表中每一条记录要对应表table_小类中的19条记录,故表table_大类有多少条记录,小类表就要读多少次] */ /// <summary> /// 大类 /// </summary> static public string GetList() { StringBuilder sb = new StringBuilder(); DataTable dt = Control.SQLSelect("select id,[name] from table_大类"); for (int i = 0; i < dt.Rows.Count; i++) { string dt_id = dt.Rows[i]["id"].ToString(); string dt_name = dt.Rows[i]["name"].ToString(); if (i % 2 == 0) { string strcss = (i % 4 == 0) ? "" : " class=/"class1a/""; sb.Append("<div" + strcss + ">"); } if (i < 12) { sb.Append("<dl class=/"class1/">"); } else { sb.Append("<dl class=/"class2/" style="/" mce_style="/""display:none;/">"); } sb.AppendFormat("<dt class=/"fo14 lan alan/"><a href="/" mce_href="/""{0}/">{1}</a></dt>", Url.GetCat(int.Parse(dt_id)), dt_name); sb.Append("<dd class=/"lana alana/">"); #region =========================小类========================= DataTable dtSub = Control.SQLSelect("select id,[name] from table_小类 where cat_id="+dt_id); int subCount = Math.Min(19, dtSub.Rows.Count); for (int j = 0; j < subCount; j++) { string dtsub_id = dtSub.Rows[j]["id"].ToString(); string dtsub_name = dtSub.Rows[j]["name"].ToString(); string strColor = ""; if (j == 0) { strColor = " style=/"color:#f60/""; } sb.AppendFormat("<a href="/" mce_href="/""{0}/"{1}>{2}</a> | ", Url.GetSubcat(int.Parse(dtsub_id)), strColor, dtsub_name); } dtSub.Dispose(); #endregion sb.AppendFormat("<a href="/" mce_href="/""{0}/">更多>></a>", Url.GetCat(int.Parse(dt_id))); sb.Append("</dd></dl>"); if (i % 2 != 0 || i == dt.Rows.Count - 1) { sb.AppendLine("</div>"); } } dt.Dispose(); return sb.ToString(); } /// <summary> /// 大类 /// </summary> /// <returns></returns> static public string GetList2() { int pre_catid = 0; //上一个catid int order_catid = 0; //当前catid顺序 int numTop19Subcat = 0; //小类只显示前19个 StringBuilder sb = new StringBuilder(); sb.Append("<div>"); DataTable dt = Control.SQLSelect("select aa.id,aa.name,bb.id as [catid],bb.name as [catname] from table_小类 as aa join table_大类 bb on aa.cat_id=bb.id"); for (int i = 0; i < dt.Rows.Count; i++) { string dt_id = dt.Rows[i]["id"].ToString(); string dt_name = dt.Rows[i]["name"].ToString(); int dt_catid = int.Parse(dt.Rows[i]["catid"].ToString()); string dt_catname = dt.Rows[i]["catname"].ToString(); if (pre_catid != dt_catid) { if (pre_catid != 0) { sb.AppendFormat("<a href="/" mce_href="/""{0}/">更多>></a>", Url.GetCat(pre_catid)); sb.Append("</dd></dl>"); if (order_catid % 2 == 0) { string strcss = ((order_catid % 4) == 0) ? "" : " class=/"class1a/""; sb.AppendLine("</div>"); sb.Append("<div" + strcss + ">"); } } order_catid++; if (order_catid < 12) { sb.Append("<dl class=/"class1/">"); } else { sb.Append("<dl class=/"class2/" style="/" mce_style="/""display:none;/">"); } sb.AppendFormat("<dt class=/"fo14 lan alan/"><a href="/" mce_href="/""{0}/">{1}</a></dt>", Url.GetCat(dt_catid), dt_catname); sb.Append("<dd class=/"lana alana/">"); } #region =========================小类========================= string strColor = ""; if (pre_catid != dt_catid) { pre_catid = dt_catid; strColor = " style=/"color:#f60/""; numTop19Subcat = 0; } numTop19Subcat++; if (numTop19Subcat <= 19) { sb.AppendFormat("<a href="/" mce_href="/""{0}/"{1}>{2}</a> | ", Url.GetSubcat(int.Parse(dt_id)), strColor, dt_name); } #endregion } dt.Dispose(); sb.AppendFormat("<a href="/" mce_href="/""{0}/">更多>></a>", Url.GetCat(pre_catid)); sb.Append("</dd></dl>"); sb.AppendLine("</div>"); return sb.ToString(); }