谁知道dropdownlist 如何实现的

 我来答
sniper2003
2009-11-03 · TA获得超过1882个赞
知道小有建树答主
回答量:775
采纳率:100%
帮助的人:659万
展开全部
/// <summary>
/// 将一个集合中的所有具有子类型集合,统一在一个集合中。然后将对应具有层次关系的记录名称前添加占位符
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="lst"></param>
/// <returns></returns>
public static IList<T> FillForTreeViewDisplay<T>(IList<T> lst)
where T : IListForTreeViewDisplay<T>
{
for (int i = lst.Count - 1; i >= 0; i--)
{
if (lst[i].HasMoreChildren())
{
FillTreeViewItems<T>(lst, lst[i].GetChildren());
}
}

//将所有子选项标题中添加上关键字引用
foreach (T item in lst)
{
if (item.Parent != null)
{
AppendTitleKeyword<T>(item, item, new StringBuilder());
}
else
{
//如果标题为主类型,则进行加粗
item.HolderString = string.Format(@"[{0}]", item.HolderString);
}
}
return null;
}

/// <summary>
/// 用于进行递归添加到主集合中的
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="sourceList"></param>
/// <param name="fillList"></param>
private static void FillTreeViewItems<T>(IList<T> sourceList, IList<T> fillList)
where T : IListForTreeViewDisplay<T>
{
for (int i = fillList.Count - 1; i >= 0; i--)
{
AddIListItem<T>(sourceList, fillList[i]);
if (fillList[i].HasMoreChildren())
{
FillTreeViewItems<T>(sourceList, fillList[i].GetChildren());
}
}
}

private static void AddIListItem<T>(IList<T> lst, T item)
where T : IListForTreeViewDisplay<T>
{
if (item.Parent == null)
{
lst.Insert(0, item);
}
else
{
lst.Insert(lst.IndexOf(item.Parent) + 1, item);
}
}

/// <summary>
/// 将类型T的标题进行替换,并返回标题替换后的对象
/// </summary>
/// <param name="t"></param>
/// <returns></returns>
private static T AppendTitleKeyword<T>(T t, T parent, StringBuilder replaceHolder)
where T : IListForTreeViewDisplay<T>
{
t.HolderString = replaceHolder.ToString() + t.HolderString;
if (parent.Parent != null)
{
AppendTitleKeyword<T>(t, parent.Parent, new StringBuilder("{$HolderString}"));
}
return t;
}

/// <summary>
/// 将集合中指定字段的部分进行替换
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="lst"></param>
/// <returns></returns>
public static IList<T> ReplaceTreeViewTitleKeyword<T>(IList<T> lst, string replaceHolder)
where T : IListForTreeViewDisplay<T>
{
foreach (T item in lst)
{
//关键字替换
item.HolderString = item.HolderString.Replace("{$HolderString}", replaceHolder);
}
return lst;
}

///////////////////////////////////////////////////////
//要实现一个接口

/// <summary>
/// 该接口主要是用于在一个表格的列中,可以以TreeView的显示方式进行表显示
/// </summary>
public interface IListForTreeViewDisplay<T>
{
/// <summary>
/// 判断是否还有子项
/// </summary>
/// <returns></returns>
bool HasMoreChildren();

/// <summary>
/// 获取当前数据信息中存在的子项
/// </summary>
/// <returns></returns>
IList<T> GetChildren();

/// <summary>
/// 获取或设置占位符的字符串。用于在有级联的情况下设置标题时显示的
/// </summary>
string HolderString { get; set; }

/// <summary>
/// 获取当前类型的父类型
/// </summary>
/// <returns></returns>
T Parent { get; }
}

/////////////////////////////////////////////////
//调用的方法

WebUtility.FillForTreeViewDisplay<这里是实现了IListForTreeViewDisplay接口的类型>(接口类型的集合对象);
WebUtility.ReplaceTreeViewTitleKeyword<这里是实现了IListForTreeViewDisplay接口的类型>(接口类型的集合对象, "要在文本之前填充的文本");
启帆信息
2024-11-19 广告
启帆信息是英伟达中国区代理商,原厂授权代理,提供全面的软件技术解决方案以及NVIDIA以太网产品、交换机等产品,欢迎前来咨询!... 点击进入详情页
本回答由启帆信息提供
thejiathe
2009-11-03 · TA获得超过279个赞
知道小有建树答主
回答量:358
采纳率:0%
帮助的人:303万
展开全部
B/S的还是C/S的?
窗体程序用树结构实现
Web程序用UL标签实现
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式