有个需求,打算做个treeview部门结构,窗体左边是树结构,右半部分是列表结构。
谁有案例,是否给提供一下呢,谢谢。
------解决思路----------------------
http://zhidao.baidu.com/link?url=avfsUilHIayWOngikhc-vPgI5czQ68djPBeRUSJKxExpcW8Rp9gRcHnv8PZ7b6K7d-oSpr6l592-Om87_HnE3a
------解决思路----------------------
或者你可以用DevExpress控件的TreeGrid
------解决思路----------------------
treeview控件实现系统导航
一、递归填充根节点控件导航
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
//获取数据连接语句,并创建数据库连接对象
myConn = DBClass.GetConnection();
CreateDataSet();
InitTree(TreeView1.Nodes, "0");
}
}
二、使用数据库数据填充父节点、子节点
public DataSet CreateDataSet()
{
query = "select * from tbTree";
myAdapter = new SqlDataAdapter(query, myConn);
data = new DataSet();
myAdapter.Fill(data, "tree");
return data;
}
//从DataSet中取数据建树
//从根节点开始递归调用显示子树
public void InitTree(TreeNodeCollection Nds, string parentId)
{
TreeNode NewNode;
//data为存储建树数据信息的数据集
//用父节点进行筛选数据集中信息
DataRow[] rows = data.Tables[0].Select("parent_Id='" + parentId + "'");
foreach (DataRow row in rows)
{
NewNode = new
TreeNode(row["title"].ToString(), //设置父节点
row["Files_Id"].ToString(), "images/1.gif", row["NavigateUrl"].ToString(), "");
Nds.Add(NewNode);
InitTree(NewNode.ChildNodes, row["Files_Id"].ToString());//添加子节点
}//codego.net/15/1/1/
}
三、单击某节点触发跳转路径事件
protected void TreeView1_SelectedNodeChanged1(object sender, EventArgs e)
{
int nodeId = Convert.ToInt32(TreeView1.SelectedValue);//获取TreeView控件选择的值
string url = DBClass.GetUrl(nodeId);//获取指定地址
Response.Redirect(url.ToString());//转到指定页
}
//利用存储过程从数据库中获取TreeView中某个节点的关联地址
四、存储过程如下
public static GetUrl(int filesID)
{
SqlConnection myConnection = GetConnection();
SqlCommand myCommand = new SqlCommand("GetUrl",myConnection);
myCommand.CommandType=ConnandType.StoredProcedure;
//添加参数
SqlParameter FilsesId = new SqlParameter("@FilesId" , SqlDbType.Int,4);
FilsesId.Value = filesId;
myCommand.Parameters.Add(FilsesId);
//添加参数
SqlParameter Url = new SqlParameter("@Url", SqlDbType.NVarChar,100);
Url.Direction = ParameterDirection.Output;
myConnection.Open();
myCommand.ExecuteNonQuery();
string url Url.Value.ToString();
myCommand.Dispose();
myConnection.Dispose();
return url;
}
------解决思路----------------------
用树形列表动态显示菜单示例
public void GetCavernMenu(TreeNode newNodeA, ToolStripDropDownItem newmenuA, bool BL)
{
bool Var_Bool = true;
if (newmenuA.HasDropDownItems && newmenuA.DropDownItems.Count > 0)
for (int j = 0; j < newmenuA.DropDownItems.Count; j++) //遍历二级菜单项
{
//将二级菜单名称添加到TreeView组件的子节点newNode1中,并设置当前节点的子节点newNode2
TreeNode newNodeB = newNodeA.Nodes.Add(newmenuA.DropDownItems[j].Text);
Var_Bool = true;
if (BL == false)//判断当前命令项的上一级命令是否可用
{
newNodeB.ForeColor = Color.Silver;//设置当前命令项的字体颜色为不可用色
newNodeB.Tag = 0;//标识,不显示相应的窗体
Var_Bool = false;
}
else
{
if (newmenuA.DropDownItems[j].Enabled == false)//判断当前命令项是否为可用
{
newNodeB.ForeColor = Color.Silver;//设置当前命令项的字体颜色为不可用色
newNodeB.Tag = 0;//标识,不显示相应的窗体
Var_Bool = false;
}
else
{
newNodeA.ForeColor = Color.Black;//设置当前命令项的字体颜色为可用色
newNodeB.Tag = int.Parse(newmenuA.DropDownItems[j].Tag.ToString());//标识,显示相应的窗体
}
}
//将当前菜单项的所有相关信息存入到ToolStripDropDownItem对象中
ToolStripDropDownItem newmenuB = (ToolStripDropDownItem)newmenuA.DropDownItems[j];
if (newmenuB.HasDropDownItems && newmenuA.DropDownItems.Count > 0)//如果当前命令项有子项
{
newNodeB.Tag = 0;//标识,有子项的命令项
GetCavernMenu(newNodeB, newmenuB, Var_Bool);//调用递归方法
}
}
}