谁知道dropdownlist 如何实现的
展开全部
/// <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接口的类型>(接口类型的集合对象, "要在文本之前填充的文本");
/// 将一个集合中的所有具有子类型集合,统一在一个集合中。然后将对应具有层次关系的记录名称前添加占位符
/// </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 广告
2024-11-19 广告
启帆信息是英伟达中国区代理商,原厂授权代理,提供全面的软件技术解决方案以及NVIDIA以太网产品、交换机等产品,欢迎前来咨询!...
点击进入详情页
本回答由启帆信息提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询