ASP.NET中把linq查询结果通Treeview控件显示
这篇博客主要是整合思路,记录我处理的过程和一种处理思路,毕竟网上好像很多是用sql查询的,我没有找到Linq查询的实现,所以我把Treeview的Linq查询记录一下,不合适的话可以看我给的链接,先感谢前人的创作,我这篇只是个整合方了。
1、Linq数据库表的结构
2、linq查询数据库获取数据的函数:
//实例化数据库
PresonalManageDataContext db = new PresonalManageDataContext();
//linq查询获取数据
public dynamic get_datadetail()
{
dynamic resutl = from r in db.Department
select new {
departmentid=r.departmentid,
name=r.name,
establishtime = r.establishtime,
parentid=r.parentid
};
return resutl;
}
3、将linq查询结果转换为datatable格式的函数:
public DataTable ConvertToTable(IQueryable query)
{
DataTable dtList = new DataTable();
bool isAdd = false;
PropertyInfo[] objProterties = null;
foreach (var item in query)
{
if (!isAdd)
{
objProterties = item.GetType().GetProperties();
foreach (var itemProterty in objProterties)
{
Type type = null;
if (itemProterty.PropertyType != typeof(string) && itemProterty.PropertyType != typeof(int) && itemProterty.PropertyType != typeof(DateTime))
{
type = typeof(string);
}
else
{
type = itemProterty.PropertyType;
}
dtList.Columns.Add(itemProterty.Name, type);
}
isAdd = true;
}
var row = dtList.NewRow();
foreach (var pi in objProterties)
{
row[pi.Name] = pi.GetValue(item, null);
}
dtList.Rows.Add(row);
}
return dtList;
}
4、aspx.cs文件构造并调用Treeview函数:
DataTable dt = new DataTable();
departmentdetail detail = new departmentdetail();
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
var data = detail.get_datadetail();
dt = detail.ConvertToTable(data);
AddTreeNode(0, (TreeNode)null);
}
}
protected void AddTreeNode(int parentid, TreeNode pNode)
{
TreeNode tn1 = new TreeNode();
DataView dv = new DataView(dt);
//过滤parentId,得到当前节点的所有子节点
dv.RowFilter = "parentid=" + parentid;
foreach (DataRowView drv in dv)
{
if (pNode == null)
{
tn1.Text = drv["name"].ToString(); //节点上要显示的名称
//tn1.NavigateUrl = drv["url"].ToString(); //点击节点名称,跳转到指定url页面
TreeView1.Nodes.Add(tn1); //将根节点加入到TreeView中去
tn1.Expanded = true;
//递归调用
AddTreeNode(int.Parse(drv["departmentid"].ToString()), tn1);
}
else
{
TreeNode tn2 = new TreeNode();
tn2.Text = drv["name"].ToString();
//tn2.NavigateUrl = drv["url"].ToString();
pNode.ChildNodes.Add(tn2);
tn1.Expanded = true;
//递归调用
AddTreeNode(int.Parse(drv["departmentid"].ToString()), tn2);
}
}
}
参考链接:数据库表和生成树函数的构造
5、结果展示: