导入图片的方法:
if (imagelist != null)
{
tvw.ImageList = imagelist1;
}
展开树节点的方法: node.Expand();
【1】绑定数据库的字段
public static IList<string> mylist = new List<string>(); //绑定数据表
public static IList<string> mylistP = new List<string>();//绑定存储过程
public static IList<string> mylistV = new List<string>();//绑定视图
connstr = "Data Source=" + txtServerName.Text.Trim() + ";Initial Catalog=" + cmbDataBaseName.Text + ";Persist Security Info=True;User ID=" + txtUsername.Text.Trim() + ";Password=" + txtPwd.Text + "";
SqlConnection oleConn = new SqlConnection(connstr);//链接数据库
string sql = "SELECT name FROM sysobjects WHERE xtype = 'U' AND name <> 'dtproperties'";
//数据表信息(用户定义,除去系统表)【表0】
sql += " use "+cmbDataBaseName.Text+" select a.name from sysobjects a where a.xtype='P' and a.status>=0 order by a.name ";
//数据库的存储过程【表1】
sql += " use " + cmbDataBaseName.Text + " select name from sysobjects where type='V'";
//数据库表的视图信息【表2】
SqlCommand oleCmd = new SqlCommand(sql, oleConn);
try
{
//oleConn.Open(); //均可
oleCmd.Connection.Open();
}
catch
{
MessageBox.Show("数据库连接失败!");
return;
}
mylist.Clear();
mylistP.Clear();
DataSet ds = new DataSet();
SqlDataAdapter da = new SqlDataAdapter(oleCmd);
da.Fill(ds); //其中有三个信息表
//获取表【0】
for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
{
mylist.Add(ds.Tables[0].Rows[i]["name"].ToString());
}
//获取存储过程【1】
for (int j = 0; j < ds.Tables[1].Rows.Count; j++)
{
mylistP.Add(ds.Tables[1].Rows[j]["name"].ToString());
}
//获取视图【2】
for (int k = 0; k < ds.Tables[2].Rows.Count; k++)
{
mylistV.Add(ds.Tables[2].Rows[k]["name"].ToString());
}
*/*************************************************************************
【2】显示到树形节点。
#region 绑定TreeView
public void NewMethod(){
//初始清除nodes
tvLeft.Nodes.Clear();
tvLeft.Nodes.Add("表");
//绑定左边列表
for (int i = 0; i < connect.mylist.Count; i++)
{
tvLeft.Nodes[0].Nodes.Add(connect.mylist[i], connect.mylist[i]);
tvLeft.Nodes[0].Nodes[i].Nodes.Add("waiting","正在加载……");
}
//视图显示
tvLeft.Nodes.Add("视图");
for (int k = 0; k < connect.mylistV.Count; k++)
{
tvLeft.Nodes[1].Nodes.Add(connect.mylistV[k], connect.mylistV[k]);
tvLeft.Nodes[1].Nodes[k].Nodes.Add("waiting", "正在加载……");
}
//存储过程显示
tvLeft.Nodes.Add("存储过程");
for (int j = 0; j < connect.mylistP.Count; j++)
{
tvLeft.Nodes[2].Nodes.Add(connect.mylistP[j], connect.mylistP[j]);
tvLeft.Nodes[2].Nodes[j].Nodes.Add("waiting", "正在加载……");
}
//tvLeft.Nodes.Add("安全性");
}
#endregion
》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》
<<<<<<<<<<<<<<<<值得借鉴的应用<<<<<<<<<<<<<<<<<<<<<<<<<<<<
public static void LoadTreeNode_Navigation(TreeNode parentNode, DataTable table)
{
if ((parentNode == null) || (parentNode.Nodes.Count == 0))
{
return;
}
if (parentNode.Nodes[0].Text.Trim() != "...")
{
return;
}
parentNode.Nodes.Clear();
string nodeKey = parentNode.Tag.ToString();
DataRow[] rows = table.Select("ParentCode='" + nodeKey + "'", "NumberSort");//访问数据库的略
if (rows.Length > 0)
{
foreach (DataRow row in rows)
{ //读取字段
string key = row["FormName"] + "";
string text = row["Description"] + "";
TreeNode node = parentNode.Nodes.Add(text);
node.Tag = key;
DataRow[] srow = table.Select("ParentCode='" + key + "'");
if (srow.Length > 0)
{
node.Nodes.Add("...");
}
}
}
}
【3】如何获取TreeView结点的文本值
注意树形节点的父子关系:
举例来体会吧:
cmbTableName.SelectedText=tvLeft.SelectedNode.Parent.Name 这样可以获取或设置树节点的名称
e.Node.Name
e.Node.Parent.Text == "视图"
e.Node.Parent.Parent.Text == "视图"
【4】选择树节点时候的颜色变化
private void treeView_navigation_BeforeSelect(object sender, TreeViewCancelEventArgs e)
{
if (treeView_navigation.SelectedNode != null)
{
treeView_navigation.SelectedNode.ForeColor = System.Drawing.Color.Black;
}
e.Node.ForeColor = System.Drawing.Color.Blue;
}
【5】当选中某一行时候,改变对应的图标
方法一:
treeViewDB.ImageList = treeImgs; //指定某个imageList
serverlistNode.ImageIndex =0; //第一张图标
serverlistNode.SelectedImageIndex = 10; //当选择时候
方法二:
在TreeView控件的属性中设置SelectedImageKey即可。当然第一步是设置ImageList属性,绑定对应的图标集合
如图: