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公共方—ataTable 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())));