您的位置:首页 > 编程语言 > ASP

ASP.NET C#生成下拉列表树实现代码

2016-04-27 15:54 756 查看
代码:

using System.Data;

using System.Web.UI.WebControls;

/// <summary>

/// 根据DataTable生成下拉列表树

/// </summary>

public class DropDownListHelp

{

private string gridline;

private DataTable dt;

public DropDownListHelp()

{

//

//TODO: 在此处添加构造函数逻辑

//

}

/// <summary>

/// 根据Datatable生成树形下拉菜单 ,可以修改这个方法符合自己的需求

/// </summary>

/// <param name="datatable"></param>

/// <param name="parentKeyField">上级节点关键字段</param>

/// <param name="parentKey">上级节点值</param>

/// <param name="keyField">本节点关键字段</param>

/// <param name="sortString">排序字符串</param>

/// <param name="ddl">DownList</param>

public void createDropDownTree(DataTable datatable, string parentKeyField, string parentKey, string keyField, string textField, string sortString, DropDownList ddl)

{

dt = datatable;

ddl.Items.Add(new ListItem("", ""));

addChildItems(parentKeyField, parentKey, keyField, textField, sortString, ddl);

}

/// <summary>

/// 递归生成树节点

/// </summary>

/// <param name="parentKeyField">上级节点关键字段</param>

/// <param name="parentKey">上级节点值</param>

/// <param name="keyField">本节点关键字段</param>

/// <param name="sortString">排序字符串</param>

/// <param name="ddl">DownList控件</param>

/// <returns></returns>

private void addChildItems(string parentKeyField, string parentKey, string keyField, string textField, string sortString, DropDownList ddl)

{

DataView dv = new DataView(dt, parentKeyField + "='" + parentKey + "'", sortString, DataViewRowState.CurrentRows);

int a = dv.Count;

if (dv.Count == 0)

{

return;

}

for (int i = 0; i < a; i++)

{

gridline = "";

dv.RowFilter = parentKeyField + "='" + parentKey + "'";

dv.Sort = sortString;

getTreeLine(parentKeyField, dv[i][parentKeyField].ToString(), keyField, dv[i][keyField].ToString(), sortString);

dv.RowFilter = parentKeyField + "='" + parentKey + "'";

dv.Sort = sortString;

ddl.Items.Add(new ListItem(gridline + (i == a - 1 ? "┗" : "┣") + dv[i][textField].ToString(), dv[i][keyField].ToString()));

addChildItems(parentKeyField, dv[i][keyField].ToString(), keyField, textField, sortString, ddl);

}

dv.Dispose();

}

/// <summary>

/// 回溯生成树的连接线

/// </summary>

/// <param name="parentKeyField">上级节点关键字段</param>

/// <param name="parentKey">上级节点值</param>

/// <param name="keyField">本节点关键字段</param>

/// <param name="nodeKey">本节点值</param>

/// <param name="sortString">排序字符串</param>

/// <returns></returns>

private void getTreeLine(string parentKeyField, string parentKey, string keyField, string nodeKey, string sortString)

{

//选择父层节点

DataView dv = new DataView(dt, keyField + "='" + parentKey + "'", sortString, DataViewRowState.CurrentRows);

if (dv.Count > 0)

{

//选择父节点同级节点

dv.RowFilter = parentKeyField + "='" + dv[0][parentKeyField].ToString() + "'";

dv.Sort = sortString;

for (int j = 0; j < dv.Count; j++)

{

if (dv[j][keyField].ToString() == parentKey)

{

if (j == dv.Count - 1)

{

gridline = " " + gridline;

}

else

{

gridline = "┃" + gridline;

}

}

}

getTreeLine(parentKeyField, dv[0][parentKeyField].ToString(), keyField, dv[0][keyField].ToString(), sortString);

}

dv.Dispose();

}

}

调用如下:

DropDownListHelp ddlHelper = new DropDownListHelp();

ddlHelper.createDropDownTree(dt, "parentID", "1", "ID","Text", "Text asc", DropDownList1);

效果如下:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: