请教一下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; } }
}
怎修改下面代码呢
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; } }
}
为何不用联合查询?用TreeView的Tag值存authors表的数据呢?
private void Rcd2_Load(object sender, EventArgs e)
{
SqlConnection conn = new SqlConnection("Data Source=.;Initial Catalog=CS;Persist Security Info=True;User ID=sa;Password=rt;");
conn.Open();
string sql = string.Format("select StorageName from TbShStorage");
SqlCommand cmd = new SqlCommand(sql, conn);
SqlDataAdapter da = new SqlDataAdapter(sql, conn);
DataSet ds = new DataSet();
da.Fill(ds, "products");
this.cbrcdckmc.DisplayMember = "StorageName";
this.comboBox.DataSource = ds.Tables[0];
private void dataGridView_CellClick(object sender, DataGridViewCellEventArgs e)
{
comboBox.Text = Convert.ToString(dgvISManage[0, dgvISManage.CurrentCell.RowIndex].Value).Trim();这样写,comboBox能显示内容了,但是点就dataGridView的数据,comboBox里没有相应的变化
//获取数据库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); //再次递归
}
}//双击菜单,显示textbox
void 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();
}