由于自己的亲身和同事面试的经历,很多考官都会问及无限级分类的问题。虽然明白其设计和原理但并未动手实现,如今开发项目需要,所以整理了一下。如有错误和不足还请多多指正。
设计和代码如下:
对于数据库的设计是非常简单的 如menu表:
Id :菜单名称的主键id
MenuName:栏目的显示名称
Fid:子栏目的父键id
即父键显示的id号 对应哪个主键的id号, 则父键对应的菜单栏目就是该主键对应栏目的子栏目(这句话可能有点拗口,请好好理解一下) 如下如:
业务逻辑代码的实现 主要是运用了递归 代码如下:
private void GetArticleCategory(string pid)
{
string sqlconn =ConfigurationManager.ConnectionStrings["SqlConn"].ConnectionString;
SqlConnection conn = new SqlConnection(sqlconn);
string sql = "select * from Menu where fid=@pid order by menuName";
SqlCommand cmd = new SqlCommand(sql, conn);
SqlParameter Pid = new SqlParameter("@pid", SqlDbType.Int);
Pid.Value = pid;
cmd.Parameters.Add(Pid);
conn.Open();
SqlDataReader sdr = cmd.ExecuteReader();
while (sdr.Read())
{
string str1 = sdr[1].ToString();
string str2 = sdr[0].ToString();
this.DropDownList1.Items.Add(new ListItem(toadd + " " + sdr[1].ToString(), sdr[0].ToString()));
toadd += "─┴";
this.GetArticleCategory(sdr[0].ToString());
toadd = toadd.Substring(0, toadd.Length - 2);
}
sdr.Close();
conn.Close();
}
代码的调用:
string toadd = "";
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
GetArticleCategory("0");
}
}