首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

C#树菜单的有关问题

2012-06-17 
C#树菜单的问题请教一下C#树菜单的问题。比如有两个表,表一[book] 里有 id,bookname,ParentID字段。 表二[au

C#树菜单的问题
请教一下C#树菜单的问题。比如有两个表,表一[book] 里有 id,bookname,ParentID字段。 表二[authors]有 bookid,author,price,sex字段。表一的id 与表二的tbookid 关联。表一是树的表,我想点击一个树节点,就可以关联到authors表,并且把表二的数据显示在txtbox里。这样。谢谢
怎修改下面代码呢
namespace userTV 

  public partial class Form1 : Form 
  { 

  public DataSet ds = new DataSet(); 
  public DataSet du = new DataSet(); 

  public Form1() 
  { 
  InitializeComponent(); 
  } 
  private void InitTreeView(TreeView treeView) 
  { 
  treeView.CheckBoxes = false;//不显示复选框 
  treeView.FullRowSelect = true; 
  ImageList imageList = new ImageList(); 
  imageList.Images.Add(new Icon("Folder.ico")); 
  imageList.Images.Add(new Icon("OpenFolder.ico")); 
  imageList.Images.Add(new Icon("Book.ico")); 
  treeView.ImageList = imageList;//设置图像集合 
  treeView.LabelEdit = false;//设置不能编辑 
  treeView.PathSeparator = "\\";//用\符号为分隔符 
  treeView.Scrollable = true;//显示滚动条 
  treeView.ShowLines = true;//显示连线 
  treeView.ShowNodeToolTips = true; 
  treeView.ShowPlusMinus = true;//显示+-号 
  treeView.ShowRootLines = true; 
  // treeView.ImageList.Add(new Icon("Book.ico")); 
  treeView.AfterSelect += new TreeViewEventHandler(treeView1_AfterSelect); 
  } 
  public void AddTree(int ParentID, TreeNode pNode) 
  { 
  DataView dvTree = new DataView(ds.Tables[0]); 
   
  //过滤ParentID,得到当前的所有子节点  
  dvTree.RowFilter = "[PARENTID] = " + ParentID; 

  treeView1.ImageIndex = 0; 
  treeView1.SelectedImageIndex = 1; 
  foreach (DataRowView Row in dvTree) 
  { 
  TreeNode Node = new TreeNode(); 
  Node.ImageIndex = 0; 
  Node.SelectedImageIndex = 1; 
  if (pNode == null) 
  { //添加根节点  
  Node.Tag = Row["ID"].ToString(); 
  Node.Text = Row["bookname"].ToString(); 
  treeView1.Nodes.Add(Node); 

  AddTree(Int32.Parse(Row["ID"].ToString()), Node); //再次递归  
  } 
  else 
  { //添加当前节点的子节点  
  Node.Tag = Row["ID"].ToString(); 
  Node.Text = Row["bookname"].ToString(); 
  pNode.Nodes.Add(Node); 
  treeView1.SelectedNode = Node; 

   
  AddTree(Int32.Parse(Row["ID"].ToString()), Node); //再次递归  

  } 
  } 
  } 
  private void AddChildNode(string strTag, string strNodeText) 
  { 
  //首先判断是否选定组件中的位置 
  if (treeView1.SelectedNode == null) 
  { 
  MessageBox.Show("请选择一个节点", "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Information); 


  } 
  else 
  { 
  if (strNodeText != "") 
  { 
  //创建一个节点对象,并初始化 
  TreeNode tmp = new TreeNode(); 
  tmp.Text = strNodeText;// new TreeNode(strNodeText); 
  tmp.Tag = strTag; 
  //在TreeView组件中加入子节点 
  treeView1.SelectedNode.Nodes.Add(tmp); 
  treeView1.SelectedNode = tmp; 
  treeView1.ExpandAll(); 
  } 
  else 
  { 
  // MessageBox.Show("TextBox组件必须填入节点名称!", "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Information); 
  return; 
  } 
  } 
  } 
  private void AddParent(string strNodeText) 
  { 
  //首先判断是否选定组件中节点的位置 
  if (treeView1.SelectedNode == null) 
  { 
  MessageBox.Show("请选择一个节点", "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Information); 
  } 
  else 
  { 
  if (strNodeText != "") 
  { 
  //创建一个节点对象,并初始化 
  TreeNode tmp; 
  tmp = new TreeNode(strNodeText); 
  //在TreeView组件中加入兄弟节点 
  treeView1.SelectedNode.Parent.Nodes.Add(tmp); 
  treeView1.ExpandAll(); 
  } 
  else 
  { 
  // MessageBox.Show("TextBox组件必须填入节点名称!", "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Information); 
  return; 
  } 
  } 
  TreeNode tnode = new TreeNode(strNodeText); 
  } 

  private void button1_Click(object sender, EventArgs e) 
  { 
  treeView1.SelectedNode.Expand(); 
  } 

  private void button2_Click(object sender, EventArgs e) 
  { 
  //定位根节点 
  treeView1.SelectedNode = treeView1.Nodes[0]; 
  //展开组件中的所有节点 
  treeView1.SelectedNode.ExpandAll(); 
  } 
  private void button3_Click(object sender, EventArgs e) 
  { 
  //定位根节点 
  treeView1.SelectedNode = treeView1.Nodes[0]; 
  //折叠组件中所有节点 
  treeView1.SelectedNode.Collapse(); 
  } 
  private void treeView1_MouseDown(object sender, MouseEventArgs e) 
  { 
  if (e.Button == MouseButtons.Right) 
  contextMenu1.Show(this, new Point(e.X, e.Y)); 
  } 
  private void Form1_Load(object sender, EventArgs e) 
  { 
  SelectTrees(); 
  } 
  public void SelectTrees() 
  { 
  SqlConnection CN = new SqlConnection(); 


  try 
  { 
  //初始化连接字符串  
  CN.ConnectionString = "Data Source=.;Initial Catalog=userTV;Persist Security Info=True;User ID=sa;Password=rt;"; 
  CN.Open(); 

  SqlDataAdapter adp = new SqlDataAdapter("select * from bookname", CN); 
  adp.Fill(ds); 
  } 
  catch (Exception ex) 
  { 
  throw ex; 
  } 
  finally 
  { 
  CN.Close(); 
  } 
  //调用递归函数,完成树形结构的生成  
  AddTree(0, (TreeNode)null); 
  } 
  private void btnTijiao_Click(object sender, EventArgs e) 
  { 
  if (txtName.Text.Trim() == string.Empty) 
  { 
  lbError.Visible = true; 
  } 
  else 
  { 
  ds.Clear(); 
  du.Clear(); 
  SqlConnection conn = new SqlConnection("Data Source=.;Initial Catalog=userTV;Persist Security Info=True;User ID=sa;Password=rt;"); 
  string sql = string.Format("insert into bookname(bookname,ParentID) values('{0}','{1}')", txtName.Text.Trim(), txtPId.Text.Trim()); 
  SqlCommand cmd = new SqlCommand(sql, conn); 
  conn.Open(); 
  int count = cmd.ExecuteNonQuery(); 
  conn.Close(); 
  if (count == 1) 
  { 
  MessageBox.Show("成功添加");//treeView1 
  treeView1.Nodes.Clear(); 
  SelectTrees(); 
  } 
  lbError.Visible = false; 
  } 
  } 
  private void treeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e) 
  { 
  string str = e.Node.Tag.ToString(); 
  txtPId.Text = str; 
  } 
  private void treeView1_AfterSelect(object sender, TreeViewEventArgs e) 
  { 
  // this.txtxiugid.Text = treeView1.FullRowSelect.ToString(); 
  string str = e.Node.Tag.ToString(); 
  string st = e.Node.Text.ToString(); 
  txtPId.Text = str; 
  txtxiugname.Text = st; 

  } 

  } 




[解决办法]

C# code
//获取数据库DataTable公共方法DataTable getDt(string SQLTxt){  string connectString="Datasourc=...";//数据库连接字符串  using (SqlConnection conn = new SqlConnection(connectString)) {     conn.Open();      using (SqlCommand cmd = conn.CreateCommand())      {            cmd.CommandText = SQLTxt;             //若想要参数可以参考SqlParameter                               DataSet dataset = new DataSet();            SqlDataAdapter adapter = new SqlDataAdapter(cmd);            adapter.Fill(dataset);            return dataset.Tables[0];      }  }}//显示树:void Form1_Load(object sender, EventArgs e){   DataTable dt=getDt("select * from book");   TreeNode pNode = null;   AddTree(0, pNode, pubdt);}void AddTree(int ParentID, TreeNode pNode, DataTable dt){                        //增加Treeview    DataView dvTree = new DataView(dt);    dvTree.RowFilter = "[FPARENTID] = " + ParentID;    foreach (DataRowView Row in dvTree)    {        TreeNode Node = new TreeNode();        Node.Text = Row["bookname"].ToString();        Node.Tag = Row["ID"].ToString();        if (pNode == null)            treeview1.Nodes.Add(Node);        else            pNode.Nodes.Add(Node);        AddTree(Int32.Parse(Row["Id"].ToString()), Node,dt); //再次递归       }}//双击菜单,显示textboxvoid treeview1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e){    DataTable dt=getDt(string.format(select * from authors where bookid in('{0}',.Node.Tag.ToString())));    textbox1.text=dt.rows[0]["author"].tosring();} 


[解决办法]
最后第2行少了个e,应为: DataTable dt=getDt(string.format(select * from authors where bookid in('{0}',e.Node.Tag.ToString())));

探讨

C# code

//获取数据库DataTable公共方法
DataTable getDt(string SQLTxt)
{
string connectString="Datasourc=...";//数据库连接字符串
using (SqlConnection conn = new SqlConnection(connectString))
{
conn.Open();
……

热点排行