将新闻分类[无限分级分类]绑定到DropDownList控件
添加或者修改新闻的时候,往往需要选择设置新闻的所在分类,如果新闻的分类是采用无限分级分类的,那么采用级联菜单的形式则不太合适,如果采用多个DropDownList控件,然后处理每个DropDownList控件的SelectedIndexChanged事件来返回服务器获取下级分类,则太慢了。
现在如果能够一次把所有的分类以阶梯形式列举出来,如下图:将方便很多!
---------------------------------
-----------------------------------
代码如下:
------
//功能说明:建立类别的下拉列表
//输 入 值:DropDownList defaultSelectId pareId DataTable
//输 出 值:
public static void BuildDropDownList(DropDownList ddl, int defaultSelectId, int pareId, DataTable dt)
{
foreach (DataRow dr in dt.Rows)
{
if (Convert.ToInt32(dr["lb_sjbh"]) == pareId)
{
ListItem li = new ListItem();
string frontStr = "";
if (Convert.ToInt32(dr["lb_jb"]) != 1)
{
for (int i = 1; i < Convert.ToInt32(dr["lb_jb"]); i++)
{
frontStr += " ";
}
frontStr += "└";
}
li.Text = frontStr + dr["lb_mc"].ToString();
li.Value = dr["lb_id"].ToString();
if (Convert.ToInt32(dr["lb_id"]) == defaultSelectId)
{
li.Selected = true;
}
ddl.Items.Add(li);
BuildDropDownList(ddl, defaultSelectId, Convert.ToInt32(dr["lb_id"]), dt);
}
}
}
--------------------
绑定到ListBox控件也可以,代码:
------------------
//功能说明:建立类别的列表
//输 入 值:ListBox defaultSelectId pareId DataTable
//输 出 值:
public static void BuildListBox(ListBox lst, int defaultSelectId, int pareId, DataTable dt)
{
foreach (DataRow dr in dt.Rows)
{
if (Convert.ToInt32(dr["lb_sjbh"]) == pareId)
{
ListItem li = new ListItem();
string frontStr = "";
if (Convert.ToInt32(dr["lb_jb"]) != 1)
{
for (int i = 1; i < Convert.ToInt32(dr["lb_jb"]); i++)
{
frontStr += " ";
}
frontStr += "└";
}
li.Text = frontStr + dr["lb_mc"].ToString();
li.Value = dr["lb_id"].ToString();
if (Convert.ToInt32(dr["lb_id"]) == defaultSelectId)
{
li.Selected = true;
}
lst.Items.Add(li);
BuildListBox(lst, defaultSelectId, Convert.ToInt32(dr["lb_id"]), dt);
}
}
}
