110,536
社区成员
发帖
与我相关
我的任务
分享
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
try
{
_db = Decoder.Config.ConfigData.Instance();
}
catch(Exception)
{
MessageBox.Show(@"Can not open config database");
Close();
return;
}
CreatTree();
}
private Decoder.Config.ConfigData _db;
private void CreatTree()
{
string sql = @"select classificationid,classificationname from MetricClassification";
DataSet ds = _db.ExecuteDataset(sql);
foreach (DataRow row in ds.Tables[0].Rows)
{
TreeNode tn = tv.Nodes.Add(row["classificationid"].ToString(), row["classificationname"].ToString());
CreatChildTree(tn, row["classificationid"].ToString());
}
}
private void CreatChildTree(TreeNode tn ,string parentid)
{
string sql = @"select metricid,metricname from Metric where metricid=" + parentid;
DataSet ds = _db.ExecuteDataset(sql);
foreach (DataRow row in ds.Tables[0].Rows)
{
tn.Nodes.Add(row["metricid"].ToString(), row["metricname"].ToString());
}
}
public static string NodeName = string.Empty;
private void tv_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
{
//获取单击节点的名字
TreeNode treeNode = sender as TreeNode;
NodeName = treeNode.Name;
}
private void tv_NodeMouseDoubleClick(object sender, TreeNodeMouseClickEventArgs e)
{
//通过双击节点获取节点的名字
TreeNode treeNode = sender as TreeNode;
string name = treeNode.Name;
RightClick(name);
}
private void Btright1Click(object sender, EventArgs e)
{
listView1.Clear();
RightClick(NodeName);
}
private void RightClick(string name)
{
string sql = @"select metricid from metric where metricname={0}";
name = string.Empty;
string sqlstring = string.Format(sql, name);
string id = string.Empty;
DataRow row = _db.ExecuteDataset(sqlstring).Tables[0].Rows[0];
id = row[0].ToString();//通过获取的节点名字找到它对应的ID
string sqlmetricthreshold = @"select name from metricthreshold where metricid={0}";
string sqlstrings = string.Format(sqlmetricthreshold, id);
DataRow dataRow = _db.ExecuteDataset(sqlstrings).Tables[0].Rows[0];
var Namen = dataRow[0].ToString();//通过表1表2之间对应的ID值,找到表2中的Namen
if (tv.SelectedNode == null)
return;
listView1.Items.Add(Namen);
}
}
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.OleDb;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace myTreeView
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
//定义数据集,将树信息放入DataTable中
DataSet ds = new DataSet();
//树节点是否完全展开
private bool isexpand = false;
//选中的节点的id
private int nodeid = -1;
//定义数据库的连接字符串
private string connstr = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=db.mdb;";
private void Form1_Load(object sender, EventArgs e)
{
tv_bind();
}
private void tv_bind()
{
try
{
//从数据库中读取分类信息至DataSet
using (OleDbConnection conn = new OleDbConnection(connstr))
{
using (OleDbDataAdapter da = new OleDbDataAdapter("select * from tree", conn))
{
da.Fill(ds, "tree");
}
}
//如果数据库中有信息那么构造树,否则提示无接点
if (ds.Tables["tree"].Rows.Count > 0)
{
//清除树节点,从根添加树
treeView1.Nodes.Clear();
Add_tree(0, (TreeNode)null);
}
else
{
treeView1.Nodes.Clear();
TreeNode node = new TreeNode();
node.Text = "暂无任何分类信息";
treeView1.Nodes.Add(node);
}
}
catch
{
treeView1.Nodes.Clear();
TreeNode node = new TreeNode();
node.Text = "暂无任何分类信息:请检查数据库连接是否正常";
treeView1.Nodes.Add(node);
}
}
//递归树
private void Add_tree(int pid, TreeNode pnode)
{
DataRow[] dr = ds.Tables["tree"].Select("pid=" + pid);
foreach (DataRow row in dr)
{
TreeNode node = new TreeNode();
if (pnode == null)
{
node.Text = row["nodename"].ToString();
node.Tag = row["id"].ToString();
treeView1.Nodes.Add(node);
Add_tree(int.Parse(row["id"].ToString()), node);
}
else
{
node.Text = row["nodename"].ToString();
node.Tag = row["id"].ToString();
pnode.Nodes.Add(node);
Add_tree(int.Parse(row["id"].ToString()), node);
}
}
}
private void treeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
{
//根据点击的节点到yuangong表提取对应的员工,然后在listview中显示
listView1.Clear();
using (OleDbConnection conn = new OleDbConnection(connstr))
{
conn.Open();
using (OleDbCommand cmd = new OleDbCommand("select products_name from products where tid=" + e.Node.Tag, conn))
{
OleDbDataReader dr = cmd.ExecuteReader();
while (dr.Read())
{
listView1.Items.Add(dr[0].ToString());
}
dr.Close();
}
}
}
private void 折叠展开树ToolStripMenuItem_Click(object sender, EventArgs e)
{
if (isexpand)
{
isexpand = false;
treeView1.CollapseAll();
}
else
{
isexpand = true;
treeView1.ExpandAll();
}
}
}
}
private void treeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
{
if (e.Button == MouseButtons.Right)
{
//选中右键点击的节点
treeView1.SelectedNode = e.Node;
//显示右键菜单
contextMenuStrip1.Visible = true;
//设置右键菜单的位置
contextMenuStrip1.Left = MousePosition.X;
contextMenuStrip1.Top = MousePosition.Y;
}
else
{
//点击其他节点时,取消正在编辑状态的节点
textBox1.Text = "";
groupBox1.Enabled = false;
//显示当前选择的节点的信息
richTextBox1.Text = "名称:"+e.Node.Text+"\n节点属性:"+e.Node.Tag;
//根据点击的节点到yuangong表提取对应的员工,然后在listview中显示
listView1.Clear();
using (SqlConnection conn = new SqlConnection(connstr))
{
conn.Open();
using (SqlCommand cmd = new SqlCommand("select yuangong from yuangong where bid=" + e.Node.Tag, conn))
{
SqlDataReader dr = cmd.ExecuteReader();
while (dr.Read())
{
listView1.Items.Add(dr[0].ToString());
}
dr.Close();
}
}
}
}
//treeview 1 循环添加父节点
public void 父节点名()
{
DataTable dt = JSXZBLL.CDCategoryManage.GetCatetoryNameForParentNode();
foreach (DataRow row in dt.Rows)
{
TreeNode node = CreateNode(Convert.ToInt32(row["id"]), Convert.ToString(row["name"])
//调用子节点
CCreateChild(Convert.ToInt32(row["id"]),node);
//吧节点添加到treeview中
this.TreeView1.Nodes.Add(node);
}
}
//公用的节点
public TreeNode CreateNode(int id, string name)
{
node.Text =name;
node.ImageUrl =imgs;
return node;
}
//treeview 1 循环添加子节点
public void CCreateChild(int parentid, TreeNode node)
{
DataTable dt = JSXZBLL.CDForumlistManage.CGetForumListNameForChildById(parentid);
foreach (DataRow row in dt.Rows)
{
TreeNode nodes = CreateNode(Convert.ToInt32(row["id"]), Convert.ToString(row["name"])
// 这句话可以不要 nodes.NavigateUrl = "ShowSecondOne.aspx?ltid=" + Convert.ToInt32(row["id"]);
node.ChildNodes.Add(nodes);
}
}
//Convert.ToInt32(row["id"]), 子节点绑定的value是自己的ID 当你点击时你判断一下就好了 然后根据ID 查询子节点放到listbox里
//treeview 1 循环添加父节点
public void 父节点名()
{
DataTable dt = JSXZBLL.CDCategoryManage.GetCatetoryNameForParentNode();
foreach (DataRow row in dt.Rows)
{
TreeNode node = CreateNode(Convert.ToInt32(row["id"]), Convert.ToString(row["name"])
//调用子节点
CCreateChild(Convert.ToInt32(row["id"]),node);
//吧节点添加到treeview中
this.TreeView1.Nodes.Add(node);
}
}
//公用的节点
public TreeNode CreateNode(int id, string name)
{
node.Text =name;
node.ImageUrl =imgs;
return node;
}
//treeview 1 循环添加子节点
public void CCreateChild(int parentid, TreeNode node)
{
DataTable dt = JSXZBLL.CDForumlistManage.CGetForumListNameForChildById(parentid);
foreach (DataRow row in dt.Rows)
{
TreeNode nodes = CreateNode(Convert.ToInt32(row["id"]), Convert.ToString(row["name"])
// 这句话可以不要 nodes.NavigateUrl = "ShowSecondOne.aspx?ltid=" + Convert.ToInt32(row["id"]);
node.ChildNodes.Add(nodes);
}
}
//Convert.ToInt32(row["id"]), 子节点绑定的value是自己的ID 当你点击时你判断一下就好了 然后根据ID 查询子节点放到listbox里
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace testcheckbox
{
public partial class treeview : Form
{
public treeview()
{
InitializeComponent();
}
//定义数据集,将树信息放入DataTable中
DataSet ds = new DataSet();
//树节点是否完全展开
private bool isexpand=false;
//选中的节点的id
private int nodeid = -1;
private void treeview_Load(object sender, EventArgs e)
{
DateTime s = DateTime.Now;
tv_bind();
toolStripStatusLabel1.Text ="构造树耗时:"+DateTime.Now.Subtract(s).TotalMilliseconds+"毫秒";
}
//将数据库中的分类信息放入数据表中
private void tv_bind()
{
try
{
//从数据库中读取分类信息至DataSet
using (SqlConnection conn = new SqlConnection("data source=127.1;initial catalog=test; user id=sa; password=sa;"))
{
using (SqlDataAdapter da = new SqlDataAdapter("select * from bumen", conn))
{
da.Fill(ds,"bumen");
}
}
//如果数据库中有信息那么构造树,否则提示无接点
if (ds.Tables["bumen"].Rows.Count > 0)
{
//清除树节点,从根添加树
treeView1.Nodes.Clear();
Add_tree(0,(TreeNode)null);
}
else
{
treeView1.Nodes.Clear();
TreeNode node = new TreeNode();
node.Text = "暂无任何分类信息";
treeView1.Nodes.Add(node);
}
}
catch
{
treeView1.Nodes.Clear();
TreeNode node = new TreeNode();
node.Text = "暂无任何分类信息:请检查数据库连接是否正常";
treeView1.Nodes.Add(node);
}
}
//递归树
private void Add_tree(int pid,TreeNode pnode)
{
DataRow[] dr = ds.Tables["bumen"].Select("pid="+pid);
foreach (DataRow row in dr)
{
TreeNode node = new TreeNode();
if (pnode == null)
{
node.Text = row["bumen"].ToString();
node.Tag = row["id"].ToString();
treeView1.Nodes.Add(node);
Add_tree(int.Parse(row["id"].ToString()),node);
}
else
{
node.Text = row["bumen"].ToString();
node.Tag = row["id"].ToString();
pnode.Nodes.Add(node);
Add_tree(int.Parse(row["id"].ToString()),node);
}
}
}
private void toolStripLabel1_Click(object sender, EventArgs e)
{
if (isexpand)
{
isexpand = false;
treeView1.CollapseAll();
}
else
{
isexpand = true;
treeView1.ExpandAll();
}
}
private void treeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
{
if (e.Button == MouseButtons.Right)
{
//选中右键点击的节点
treeView1.SelectedNode = e.Node;
//显示右键菜单
contextMenuStrip1.Visible = true;
//设置右键菜单的位置
contextMenuStrip1.Left = MousePosition.X;
contextMenuStrip1.Top = MousePosition.Y;
}
else
{
//点击其他节点时,取消正在编辑状态的节点
textBox1.Text = "";
groupBox1.Enabled = false;
//显示当前选择的节点的信息
richTextBox1.Text = "名称:"+e.Node.Text+"\n节点属性:"+e.Node.Tag;
}
}
private void 编辑节点ToolStripMenuItem_Click(object sender, EventArgs e)
{
if (int.Parse(treeView1.SelectedNode.Tag.ToString()) >-1)
{
nodeid = int.Parse(treeView1.SelectedNode.Tag.ToString());
groupBox1.Enabled = true;
textBox1.Text = treeView1.SelectedNode.Text;
}
else
{
MessageBox.Show("请选择要编辑的节点");
}
}
private void button1_Click(object sender, EventArgs e)
{
if (nodeid > -1)
{
//检查同级别节点是否有重名
using (SqlConnection conn = new SqlConnection("data source=127.1;initial catalog=test;user id=sa;password=sa;"))
{
conn.Open();
using (SqlCommand cmd = new SqlCommand("select count(id) from bumen where pid=(select pid from bumen where id=" + nodeid + ") and bumen='" + textBox1.Text.Trim() + "' and id<>"+nodeid, conn))
{
int i = int.Parse(cmd.ExecuteScalar().ToString());
if (i > 0)
{
MessageBox.Show("错误!该分类已经存在同名节点");
}
else
{
cmd.CommandText = "update bumen set bumen='"+textBox1.Text.Trim()+"' where id="+nodeid;
int isupdateok = cmd.ExecuteNonQuery();
if (isupdateok == 1)
{
MessageBox.Show("编辑节点信息成功!");
textBox1.Text = "";
groupBox1.Enabled = false;
treeView1.Nodes.Clear();
tv_bind();
treeView1.ExpandAll();
}
else
{
MessageBox.Show("编辑节点信息失败!请重新编辑","错误",MessageBoxButtons.OK,MessageBoxIcon.Error);
}
}
}
}
}
}
}
}
public static string NodeName = string.Empty;
private void tv_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
{
//获取单击节点的名字
TreeNode treeNode = sender as TreeNode;
NodeName = treeNode.Name;
}
private void tv_NodeMouseDoubleClick(object sender, TreeNodeMouseClickEventArgs e)
{
//通过双击节点获取节点的名字
TreeNode treeNode = sender as TreeNode;
string name = treeNode.Name;
RightClick(name);
}
private void Btright1Click(object sender, EventArgs e)
{
listView1.Clear();
RightClick(NodeName);
}
private void RightClick(string name)
{
string sql = @"select metricid from metric where metricname={0}";
name = string.Empty;
string sqlstring = string.Format(sql, name);
string id = string.Empty;
DataRow row = _db.ExecuteDataset(sqlstring).Tables[0].Rows[0];
id = row[0].ToString();//通过获取的节点名字找到它对应的ID
string sqlmetricthreshold = @"select name from metricthreshold where metricid={0}";
string sqlstrings = string.Format(sqlmetricthreshold, id);
DataRow dataRow = _db.ExecuteDataset(sqlstrings).Tables[0].Rows[0];
var Namen = dataRow[0].ToString();//通过表1表2之间对应的ID值,找到表2中的Namen
if (tv.SelectedNode == null)
return;
listView1.Items.Add(Namen);
}