如果Dropdownlist绑定一个客户类别,而每个类别有包含小类别,而且级别没限制,我们 要分类显示在Dropdownlist中,每个子级别都比父级别缩进,怎么写呢?
注意,空格不能直接添加到控件中,你必须以Server.HtmlDecode(" ")来设置。
高手不要汗,我是入门级的。
参考数据表:
CTTYPE 客户类型表 | |||
* | CTTYPEID | 客户类型iD | smallint |
NAME | 客户类型名称 | varchar | |
SubOfType | 客户类型代码 | smallint | |
注意:表中SubofType=0表示根类
public partial class DDLType : System.Web.UI.UserControl
{
private BFLList BList;
private IQueryable<myType> Type;
/// <summary>
/// 类别ID的属性
/// </summary>
private string _TypeID;
public string TypeID
{
get
{
return ListType.SelectedValue;
}
set
{
_TypeID = value;//new ListItem((new BFLList()).GetClientByID(int.Parse(value)).First().NAME));
}
}
protected void Page_Load(object sender, EventArgs e)
{
}
/// <summary>
/// 初始化(客户,供应商等)类别控件
/// </summary>
/// <param name="type">类别名称</param>
public void InitType(string type)
{
BList = new BFLList();
switch(type.ToUpper())
{
case "CLIENT":
Type = BList.GetClientTypeAll(); break;
case"VENDOR":
Type = BList.GetVendorTypeAll(); break;
}
foreach (var c in Type.Where(p => p.SubOfType == (short)0).Select(p => p))
{
ListType.Items.Add(new ListItem(c.Name, c.ID.ToString()));
BindListType(Type, short.Parse(ListType.Items[ListType.Items.Count - 1].Value), "┕┅┅");
}
ListType.SelectedIndex = 0;
ListType.SelectedValue = _TypeID;
}
/// <summary>
/// 递归遍历(客户,供应商等)类型表,并在下拉框中添加信息
/// </summary>
public void BindListType(IQueryable<myType> list, short root, string head)
{
var types = list.Where(p => p.SubOfType == root).Select(p => p);
if (types.Count() > 0)
{
foreach (var v in types)
{
ListType.Items.Add(new ListItem(v.Name.Insert(0, head), v.ID.ToString()));
string blank2 = Server.HtmlDecode(" ") + head;
BindListType(list,short.Parse(ListType.Items[ListType.Items.Count - 1].Value), blank2);
}
}
}
}