很急,很急,很急--关于treeview问题,100分求教 关于winform的treeview,怎么才能和数据库连接起来,就是说,选中一个节点,就能在datagrid里显示出来相应的数据库里的信息,没有用过treeview,最好能有代码说明,多谢,在线等,解决后马上结账 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 http://community.csdn.net/Expert/topic/3856/3856050.xml?temp=3.268069E-02不好意思,没做过winForm的。 AfterSelect事件可以写获取数据的过程AfterSelect事件有TreeViewEventArgs作为参数可以得到当前选择的TreeNode. 这里面就涉及三个方面的问题啊!1:选择TreeView中的某个节点返回一个信息(Index 或者 Name之类的,不过你肯定需要后者)2:从数据库中进行搜索并返回结果到DataSet中去3:对DataGrid进行动态的数据绑定,并显示出来你是哪个方面不明白? 第一步:在AfterSelect事件之后定位选择的Node并且返回选择的Node的Text====================================================================private void treeView1_AfterSelect(object sender, System.Windows.Forms.TreeViewEventArgs e){ string strSelectNodeName = string.Empty; strSelectNodeName = e.Node.Text.ToString();}====================================================================第二步:将选择的Node的Text值作为参数传入你的SelectCommand里面,Select语句不用写了吧?第三步:将选择后的结果集合绑定到你街面上面的DataGrid中==================================================================== DataGrid.DataSource = DataSet;//这是你的结果集的DataSet====================================================================其中绑定方面有些东西我没有试验过,你自己添加一下就好了! 如果是这样的话,完全可以用DataGrid去做。。 可是人家要用TreeView做啊!需求不同吗?有时候不一定整合、简单就好!好的解决方案最主要是完全满足客户的需求呀!hoho TREEVIEW在WINFROM下是很简单的.你查一个VS.NET的帮助文档,有详细方式. 在treeview中 创建树: //Build the Class Tree 递规实现目录树 private void BuilderTree(TreeNodeCollection tnc ,string parentID,DataView dv) { if (parentID=="") { dv.RowFilter= "ParentID is null"; } else { dv.RowFilter= "ParentID="+"'"+parentID+"'"; } foreach(DataRowView drv in dv) { TreeNode tn=new TreeNode(); tn.Text=drv["ClassName"].ToString().Trim(); tn.Tag =drv["ClassID"].ToString().Trim(); tnc.Add(tn); BuilderTree(tn.Nodes,drv["ClassID"].ToString().Trim(),dv); } } 选择时显示数据库 private void tvClass_AfterSelect(object sender, System.Windows.Forms.TreeViewEventArgs e) { lbFileList.Items.Clear(); // Create Command Object string sqlstr = "Select FileName from Document where ClassID=" + tvClass.SelectedNode.Tag.ToString(); try { //SqlCommand dbComm = new SqlCommand(sqlstr, sqlConn); sqlCmd.CommandType = CommandType.Text; sqlCmd.CommandText = sqlstr; // Open Connection sqlConn.Open(); // Execute command and receive DataReader SqlDataReader dbRead = sqlCmd.ExecuteReader(); // Read row while(dbRead.Read()) { //这里是处理信息 } sqlConn.Close(); } catch(SqlException sqle) { MessageBox.Show(sqle.Message); } } string sql = "select ....by " + treeView.SelectNode.text;即可 数据库的连接,OLEDB和SQL是一样的么 sharonlibra() : lbFileList.Items.Clear();这句话在这里起什么作用阿 private void tree_AfterSelect(object sender,System.Windows.Forms.TreeViewEventArgs e) { string strConn="select * from info where id="+tvTree.SelectedNode.Tag.ToString(); OleDbConnection myConn =new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\Downloads\data.mdb"); OleDbCommand myCommand=new OleDbCommand(); myCommand.CommandText=strConn; myCommand.CommandType=CommandType.Text; myConn.Open(); //OleDbDataReader dr=myCommand.ExecuteReader(); OleDbDataAdapter da =new OleDbDataAdapter(myCommand,myConn); DataSet ds= new DataSet(); da.Fill(ds,"info"); datagrid.DataSource=ds.Tables["info"].DefaultView; }我这么些对么 与“System.Data.OleDb.OleDbDataAdapter.OleDbDataAdapter(string, string)”最匹配的重载方法具有一些无效参数是什么错误啊 你看看参数列表啊!你的myConn是什么类型的呢? 已经解决了,应该是myCommand.CommandText,我看错了,可是还有问题啊,我的代码是这么写的,帮我看看好么private void tree_AfterSelect(object sender,System.Windows.Forms.TreeViewEventArgs e) { string strConn="select * from info where id="+tvTree.SelectedNode.Tag.ToString(); OleDbConnection myConn =new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\Downloads\data.mdb"); OleDbCommand myCommand=new OleDbCommand(); myCommand.CommandText=strConn; myCommand.CommandType=CommandType.Text; myConn.Open(); //OleDbDataReader dr=myCommand.ExecuteReader(); OleDbDataAdapter da =new OleDbDataAdapter(myCommand.CommandText,myConn); DataSet ds= new DataSet(); da.Fill(ds,"info"); datagrid.DataSource=ds.Tables["info"].DefaultView; }我这么绑定datagrid有错么,可是,怎么我的树和datagrid没有数据显示阿 还有一段是照上面的写的,我想应该是建一个树吧,我不是很懂,能不能帮我解释一下private void BuildTree(TreeNodeCollection tnc,string parentID,DataView dv) { if(parentID=="") { dv.RowFilter="null"; } else { dv.RowFilter="parentID="+"'"+parentID+"'"; foreach(DataRowView drv in dv) { TreeNode tn =new TreeNode(); tn.Text=drv["jbxm"].ToString().Trim(); tn.Tag=drv["id"].ToString().Trim(); tnc.Add(tn); BuildTree(tn.Nodes,drv["id"].ToString().Trim(),dv); } } } datagrid.DataSource=ds.Tables["info"].DefaultView;写完这句还应有一句datagrid.DataBind(); sharonlibra()生成TreeView的方法效率太低。 那要怎么才能高效的生成treeview呢,我现在运行后,界面是一片空白阿 不晓得,觉得是否表不合理?我做treeview的时候没有那么难的! 我就是在form上拉了一个treeview和datagrid,其他的什么都没有设置,在后台的代码就是上面的两段代码,对于treeview的控制,我今天才开始学,关于表,我就是设置了id,jbxm两个字段 那不行,我把我写的代码贴出来吧!请大家多指教:using System;using System.Drawing;using System.Collections;using System.ComponentModel;using System.Windows.Forms;using System.Data;namespace TreeAndGrid{ /// <summary> /// Form1 的摘要说明。 /// </summary> public class Form1 : System.Windows.Forms.Form { private System.Windows.Forms.TreeView treeView1; private System.Windows.Forms.DataGrid dataGrid1; private System.Windows.Forms.Button btnLoad; private System.Data.DataSet dataSet1; private System.Data.DataTable dataTable1; private System.Data.DataColumn dataColumn1; private System.Data.DataColumn dataColumn2; private System.Data.DataColumn dataColumn3; private System.Data.DataTable dataTable2; private System.Data.DataColumn dataColumn4; private System.Data.DataColumn dataColumn5; private System.Data.DataColumn dataColumn6; /// <summary> /// 必需的设计器变量。 /// </summary> private System.ComponentModel.Container components = null; public Form1() { // // Windows 窗体设计器支持所必需的 // InitializeComponent(); // // TODO: 在 InitializeComponent 调用后添加任何构造函数代码 // } /// <summary> /// 清理所有正在使用的资源。 /// </summary> protected override void Dispose( bool disposing ) { if( disposing ) { if (components != null) { components.Dispose(); } } base.Dispose( disposing ); } #region Windows 窗体设计器生成的代码 /// <summary> /// 设计器支持所需的方法 - 不要使用代码编辑器修改 /// 此方法的内容。 /// </summary> private void InitializeComponent() { this.treeView1 = new System.Windows.Forms.TreeView(); this.dataGrid1 = new System.Windows.Forms.DataGrid(); this.btnLoad = new System.Windows.Forms.Button(); this.dataSet1 = new System.Data.DataSet(); this.dataTable1 = new System.Data.DataTable(); this.dataColumn1 = new System.Data.DataColumn(); this.dataColumn2 = new System.Data.DataColumn(); this.dataColumn3 = new System.Data.DataColumn(); this.dataTable2 = new System.Data.DataTable(); this.dataColumn4 = new System.Data.DataColumn(); this.dataColumn5 = new System.Data.DataColumn(); this.dataColumn6 = new System.Data.DataColumn(); ((System.ComponentModel.ISupportInitialize)(this.dataGrid1)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.dataSet1)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.dataTable1)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.dataTable2)).BeginInit(); this.SuspendLayout(); // // treeView1 // this.treeView1.ImageIndex = -1; this.treeView1.Location = new System.Drawing.Point(8, 8); this.treeView1.Name = "treeView1"; this.treeView1.SelectedImageIndex = -1; this.treeView1.Size = new System.Drawing.Size(176, 344); this.treeView1.TabIndex = 0; this.treeView1.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.treeView1_AfterSelect); // // dataGrid1 // this.dataGrid1.DataMember = ""; this.dataGrid1.HeaderForeColor = System.Drawing.SystemColors.ControlText; this.dataGrid1.Location = new System.Drawing.Point(188, 8); this.dataGrid1.Name = "dataGrid1"; this.dataGrid1.Size = new System.Drawing.Size(384, 344); this.dataGrid1.TabIndex = 1; // // btnLoad // this.btnLoad.Location = new System.Drawing.Point(496, 356); this.btnLoad.Name = "btnLoad"; this.btnLoad.Size = new System.Drawing.Size(76, 24); this.btnLoad.TabIndex = 2; this.btnLoad.Text = "&Load"; this.btnLoad.Click += new System.EventHandler(this.btnLoad_Click); // // dataSet1 // this.dataSet1.DataSetName = "NewDataSet"; this.dataSet1.Locale = new System.Globalization.CultureInfo("zh-CN"); this.dataSet1.Tables.AddRange(new System.Data.DataTable[] { this.dataTable1, this.dataTable2}); // // dataTable1 // this.dataTable1.Columns.AddRange(new System.Data.DataColumn[] { this.dataColumn1, this.dataColumn2, this.dataColumn3}); this.dataTable1.TableName = "Table1"; // // dataColumn1 // this.dataColumn1.ColumnName = "DeptID"; // // dataColumn2 // this.dataColumn2.ColumnName = "DeptName"; // // dataColumn3 // this.dataColumn3.ColumnName = "ParentID"; // // dataTable2 // this.dataTable2.Columns.AddRange(new System.Data.DataColumn[] { this.dataColumn4, this.dataColumn5, this.dataColumn6}); this.dataTable2.TableName = "Table2"; // // dataColumn4 // this.dataColumn4.ColumnName = "Column1"; // // dataColumn5 // this.dataColumn5.ColumnName = "Column2"; // // dataColumn6 // this.dataColumn6.ColumnName = "Column3"; // // Form1 // this.AutoScaleBaseSize = new System.Drawing.Size(6, 14); this.ClientSize = new System.Drawing.Size(576, 381); this.Controls.Add(this.btnLoad); this.Controls.Add(this.dataGrid1); this.Controls.Add(this.treeView1); this.Name = "Form1"; this.Text = "Form1"; ((System.ComponentModel.ISupportInitialize)(this.dataGrid1)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.dataSet1)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.dataTable1)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.dataTable2)).EndInit(); this.ResumeLayout(false); } #endregion /// <summary> /// 应用程序的主入口点。 /// </summary> [STAThread] static void Main() { Application.Run(new Form1()); } private void btnLoad_Click(object sender, System.EventArgs e) { LoadData(); ShowTree(); } /// <summary> /// 生成数据 /// </summary> private void LoadData() { dataTable1.Rows.Add(new string[]{"1","A部门","0"}); dataTable1.Rows.Add(new string[]{"2","B部门","0"}); dataTable1.Rows.Add(new string[]{"3","C部门","0"}); dataTable1.Rows.Add(new string[]{"4","D部门","0"}); dataTable1.Rows.Add(new string[]{"5","A1","1"}); dataTable1.Rows.Add(new string[]{"6","A2","1"}); dataTable1.Rows.Add(new string[]{"7","A3","1"}); dataTable1.Rows.Add(new string[]{"8","A11","5"}); dataTable1.Rows.Add(new string[]{"9","A12","5"}); dataTable1.Rows.Add(new string[]{"10","A21","6"}); dataTable1.Rows.Add(new string[]{"11","C1","3"}); dataTable1.Rows.Add(new string[]{"12","C2","3"}); dataTable1.Rows.Add(new string[]{"13","C3","3"}); } /// <summary> /// 递归取得Tree中某个节点的所有子节点数据 /// </summary> /// <param name="tn"></param> private void GetSubData(TreeNode tn) { if(tn==null)return; dataTable1.DefaultView.Sort="ParentID"; DataRowView[] drv=dataTable1.DefaultView.FindRows(((DataRowView)tn.Tag)["DeptID"].ToString()); if(drv.Length>0) { tn.Nodes.Clear(); for(int i=0;i<drv.Length;i++) { TreeNode tnSub=new TreeNode(drv[i]["DeptName"].ToString()); tnSub.Tag=drv[i]; tn.Nodes.Add(tnSub); GetSubData(tnSub); } } } /// <summary> /// 显示Tree /// </summary> private void ShowTree() { dataTable1.DefaultView.Sort="ParentID"; DataRowView[] drvMain=dataTable1.DefaultView.FindRows("0"); for(int i=0;i<drvMain.Length;i++) { TreeNode tn=new TreeNode(drvMain[i]["DeptName"].ToString()); tn.Tag=drvMain[i]; treeView1.Nodes.Add(tn); GetSubData(tn); } } /// <summary> /// 节点选择后的数据处理 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void treeView1_AfterSelect(object sender, System.Windows.Forms.TreeViewEventArgs e) { dataTable2.Rows.Clear(); DataRowView dtv=(DataRowView)treeView1.SelectedNode.Tag; DataRow dtrShow=dataTable2.NewRow(); dataTable2.Rows.Add(dtv.Row.ItemArray); dataGrid1.DataSource=dataTable2.DefaultView; } }} 多谢lijipan(多空),关于treeview我有点明白了,可是,datagrid的数据绑定,你是用datatable来显示,我想的是从treeview里来选择一个值,根据这个值来从一个access数据库里来取值啊 你可以把数据记录放在treeview的节点数据Tag中,根据选择不同的节点,直接从Tag里边取数据.那样就不用频繁地访问数据库. 你可以把数据记录放在treeview的节点数据Tag中,根据选择不同的节点,直接从Tag里边取数据.那样就不用频繁地访问数据库.对不起,能用代码说明么,tree.SelectedNode.Tag是么,还有DataRowView[] drv=dataTable1.DefaultView.FindRows(((DataRowView)tn.Tag)["DeptID"].ToString());里的DeptID是什么意思呢,我现在好像是似懂非懂 啊,这么多人了,多谢大家的支持阿,lijipan(多空) ,多谢你,可是,我的问题跟trui一样,对于从treeview的tag里取值是不是tree.selectednode.tag.tostring().trim();啊 我的代码就是用SelectedNode.Tag的啊.如果不用Tag保存,用ID去查数据库的话,效率就低了.DeptID是程序里面定义的数据列.含义是部门ID.DataRowView[] drv=dataTable1.DefaultView.FindRows(((DataRowView)tn.Tag)["DeptID"].ToString());这句代码的含义,是将当前节点的部门ID作为条件,查找ParentID等于部门ID的数据. 就是说,可以把数据表里的关键字段加到tag里,然后就可以从数据库里查到数据了,我这么理解对不对 要想树节点加载快,就要在需要展开某个节点的时候再加载这个节点的子节点。至于选中节点时执行SQL查询,TreeNode有个Object类型的属性叫做Tag,没有任何用途,就是让程序员往上挂属性的。可以自定义一个类,包含全部需要的属性,然后挂到节点的Tag上。也可以继承一个TreeNode,里面添加需要的属性、方法,然后加载到树上。 那不行,我把我写的代码贴出来吧!请大家多指教:using System;using System.Drawing;using System.Collections;using System.ComponentModel;using System.Windows.Forms;using System.Data;namespace TreeAndGrid{ /// <summary> /// Form1 的摘要说明。 /// </summary> public class Form1 : System.Windows.Forms.Form { private System.Windows.Forms.TreeView treeView1; private System.Windows.Forms.DataGrid dataGrid1; private System.Windows.Forms.Button btnLoad; private System.Data.DataSet dataSet1; private System.Data.DataTable dataTable1; private System.Data.DataColumn dataColumn1; private System.Data.DataColumn dataColumn2; private System.Data.DataColumn dataColumn3; private System.Data.DataTable dataTable2; private System.Data.DataColumn dataColumn4; private System.Data.DataColumn dataColumn5; private System.Data.DataColumn dataColumn6; /// <summary> /// 必需的设计器变量。 /// </summary> private System.ComponentModel.Container components = null; public Form1() { // // Windows 窗体设计器支持所必需的 // InitializeComponent(); // // TODO: 在 InitializeComponent 调用后添加任何构造函数代码 // } /// <summary> /// 清理所有正在使用的资源。 /// </summary> protected override void Dispose( bool disposing ) { if( disposing ) { if (components != null) { components.Dispose(); } } base.Dispose( disposing ); } #region Windows 窗体设计器生成的代码 /// <summary> /// 设计器支持所需的方法 - 不要使用代码编辑器修改 /// 此方法的内容。 /// </summary> private void InitializeComponent() { this.treeView1 = new System.Windows.Forms.TreeView(); this.dataGrid1 = new System.Windows.Forms.DataGrid(); this.btnLoad = new System.Windows.Forms.Button(); this.dataSet1 = new System.Data.DataSet(); this.dataTable1 = new System.Data.DataTable(); this.dataColumn1 = new System.Data.DataColumn(); this.dataColumn2 = new System.Data.DataColumn(); this.dataColumn3 = new System.Data.DataColumn(); this.dataTable2 = new System.Data.DataTable(); this.dataColumn4 = new System.Data.DataColumn(); this.dataColumn5 = new System.Data.DataColumn(); this.dataColumn6 = new System.Data.DataColumn(); ((System.ComponentModel.ISupportInitialize)(this.dataGrid1)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.dataSet1)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.dataTable1)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.dataTable2)).BeginInit(); this.SuspendLayout(); // // treeView1 // this.treeView1.ImageIndex = -1; this.treeView1.Location = new System.Drawing.Point(8, 8); this.treeView1.Name = "treeView1"; this.treeView1.SelectedImageIndex = -1; this.treeView1.Size = new System.Drawing.Size(176, 344); this.treeView1.TabIndex = 0; this.treeView1.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.treeView1_AfterSelect); // // dataGrid1 // this.dataGrid1.DataMember = ""; this.dataGrid1.HeaderForeColor = System.Drawing.SystemColors.ControlText; this.dataGrid1.Location = new System.Drawing.Point(188, 8); this.dataGrid1.Name = "dataGrid1"; this.dataGrid1.Size = new System.Drawing.Size(384, 344); this.dataGrid1.TabIndex = 1; // // btnLoad // this.btnLoad.Location = new System.Drawing.Point(496, 356); this.btnLoad.Name = "btnLoad"; this.btnLoad.Size = new System.Drawing.Size(76, 24); this.btnLoad.TabIndex = 2; this.btnLoad.Text = "&Load"; this.btnLoad.Click += new System.EventHandler(this.btnLoad_Click); // // dataSet1 // this.dataSet1.DataSetName = "NewDataSet"; this.dataSet1.Locale = new System.Globalization.CultureInfo("zh-CN"); this.dataSet1.Tables.AddRange(new System.Data.DataTable[] { this.dataTable1, this.dataTable2}); // // dataTable1 // this.dataTable1.Columns.AddRange(new System.Data.DataColumn[] { this.dataColumn1, this.dataColumn2, this.dataColumn3}); this.dataTable1.TableName = "Table1"; // // dataColumn1 // this.dataColumn1.ColumnName = "DeptID"; // // dataColumn2 // this.dataColumn2.ColumnName = "DeptName"; // // dataColumn3 // this.dataColumn3.ColumnName = "ParentID"; // // dataTable2 // this.dataTable2.Columns.AddRange(new System.Data.DataColumn[] { this.dataColumn4, this.dataColumn5, this.dataColumn6}); this.dataTable2.TableName = "Table2"; // // dataColumn4 // this.dataColumn4.ColumnName = "Column1"; // // dataColumn5 // this.dataColumn5.ColumnName = "Column2"; // // dataColumn6 // this.dataColumn6.ColumnName = "Column3"; // // Form1 // this.AutoScaleBaseSize = new System.Drawing.Size(6, 14); this.ClientSize = new System.Drawing.Size(576, 381); this.Controls.Add(this.btnLoad); this.Controls.Add(this.dataGrid1); this.Controls.Add(this.treeView1); this.Name = "Form1"; this.Text = "Form1"; ((System.ComponentModel.ISupportInitialize)(this.dataGrid1)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.dataSet1)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.dataTable1)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.dataTable2)).EndInit(); this.ResumeLayout(false); } #endregion /// <summary> /// 应用程序的主入口点。 /// </summary> [STAThread] static void Main() { Application.Run(new Form1()); } private void btnLoad_Click(object sender, System.EventArgs e) { LoadData(); ShowTree(); } 也可以这么做.不过我的建议是把一行数据直接放到Tag,选择节点的时候,把Tag取出来,转换以后,放到DataGrid就可以了.不用再到数据库取数据. 哦,明白很多了,多谢大家,我还有个跟本贴无关的问题,在winform里打印是不是很麻烦 如何响应IC卡触发事件 写一个简单正则表达式 关闭模式窗体 C#读取BLOB字段内容,并转换为字符串,出现乱码怎么解决? b/s模式的帮助文档类型? 高手请进,一般的也可以进,最菜的也可以进,因为我是超菜。。。问题如下: treeview问题:如何实现就一个父节点是固定的,让它的子节点从数据库中动态查出 来帮我看看这条update语句! datareader 怪问题 vs2005,C#开发Wince5的程序,如何配置才能在虚拟器中跑SQLite数据库程序。 有關delegate 問題 请问如何实现找到自己的服务器端所在计算机的ip(200分送上)
不好意思,没做过winForm的。
AfterSelect事件有TreeViewEventArgs作为参数可以得到当前选择的TreeNode.
1:选择TreeView中的某个节点返回一个信息(Index 或者 Name之类的,不过你肯定需要后者)
2:从数据库中进行搜索并返回结果到DataSet中去
3:对DataGrid进行动态的数据绑定,并显示出来
你是哪个方面不明白?
====================================================================
private void treeView1_AfterSelect(object sender, System.Windows.Forms.TreeViewEventArgs e)
{
string strSelectNodeName = string.Empty;
strSelectNodeName = e.Node.Text.ToString();
}
====================================================================
第二步:将选择的Node的Text值作为参数传入你的SelectCommand里面,Select语句不用写了吧?
第三步:将选择后的结果集合绑定到你街面上面的DataGrid中
====================================================================
DataGrid.DataSource = DataSet;//这是你的结果集的DataSet
====================================================================
其中绑定方面有些东西我没有试验过,你自己添加一下就好了!
//Build the Class Tree
递规实现目录树
private void BuilderTree(TreeNodeCollection tnc ,string parentID,DataView dv)
{
if (parentID=="")
{
dv.RowFilter= "ParentID is null";
}
else
{
dv.RowFilter= "ParentID="+"'"+parentID+"'";
}
foreach(DataRowView drv in dv)
{
TreeNode tn=new TreeNode();
tn.Text=drv["ClassName"].ToString().Trim();
tn.Tag =drv["ClassID"].ToString().Trim();
tnc.Add(tn);
BuilderTree(tn.Nodes,drv["ClassID"].ToString().Trim(),dv);
}
}
选择时显示数据库
private void tvClass_AfterSelect(object sender, System.Windows.Forms.TreeViewEventArgs e)
{
lbFileList.Items.Clear();
// Create Command Object
string sqlstr = "Select FileName from Document where ClassID=" + tvClass.SelectedNode.Tag.ToString();
try
{
//SqlCommand dbComm = new SqlCommand(sqlstr, sqlConn);
sqlCmd.CommandType = CommandType.Text;
sqlCmd.CommandText = sqlstr;
// Open Connection
sqlConn.Open(); // Execute command and receive DataReader
SqlDataReader dbRead = sqlCmd.ExecuteReader();
// Read row while(dbRead.Read())
{
//这里是处理信息
}
sqlConn.Close();
}
catch(SqlException sqle)
{
MessageBox.Show(sqle.Message);
}
}
即可
{
string strConn="select * from info where id="+tvTree.SelectedNode.Tag.ToString();
OleDbConnection myConn =new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\Downloads\data.mdb");
OleDbCommand myCommand=new OleDbCommand();
myCommand.CommandText=strConn;
myCommand.CommandType=CommandType.Text;
myConn.Open(); //OleDbDataReader dr=myCommand.ExecuteReader();
OleDbDataAdapter da =new OleDbDataAdapter(myCommand,myConn);
DataSet ds= new DataSet();
da.Fill(ds,"info"); datagrid.DataSource=ds.Tables["info"].DefaultView; }
我这么些对么
是什么错误啊
private void tree_AfterSelect(object sender,System.Windows.Forms.TreeViewEventArgs e)
{
string strConn="select * from info where id="+tvTree.SelectedNode.Tag.ToString();
OleDbConnection myConn =new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\Downloads\data.mdb");
OleDbCommand myCommand=new OleDbCommand();
myCommand.CommandText=strConn;
myCommand.CommandType=CommandType.Text;
myConn.Open(); //OleDbDataReader dr=myCommand.ExecuteReader();
OleDbDataAdapter da =new OleDbDataAdapter(myCommand.CommandText,myConn);
DataSet ds= new DataSet();
da.Fill(ds,"info"); datagrid.DataSource=ds.Tables["info"].DefaultView; }我这么绑定datagrid有错么,可是,怎么我的树和datagrid没有数据显示阿
private void BuildTree(TreeNodeCollection tnc,string parentID,DataView dv)
{
if(parentID=="")
{
dv.RowFilter="null";
}
else
{
dv.RowFilter="parentID="+"'"+parentID+"'";
foreach(DataRowView drv in dv)
{
TreeNode tn =new TreeNode();
tn.Text=drv["jbxm"].ToString().Trim();
tn.Tag=drv["id"].ToString().Trim();
tnc.Add(tn);
BuildTree(tn.Nodes,drv["id"].ToString().Trim(),dv);
}
}
}
写完这句还应有一句
datagrid.DataBind();
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;namespace TreeAndGrid
{
/// <summary>
/// Form1 的摘要说明。
/// </summary>
public class Form1 : System.Windows.Forms.Form
{
private System.Windows.Forms.TreeView treeView1; private System.Windows.Forms.DataGrid dataGrid1; private System.Windows.Forms.Button btnLoad; private System.Data.DataSet dataSet1; private System.Data.DataTable dataTable1;
private System.Data.DataColumn dataColumn1;
private System.Data.DataColumn dataColumn2;
private System.Data.DataColumn dataColumn3; private System.Data.DataTable dataTable2;
private System.Data.DataColumn dataColumn4;
private System.Data.DataColumn dataColumn5;
private System.Data.DataColumn dataColumn6;
/// <summary>
/// 必需的设计器变量。
/// </summary>
private System.ComponentModel.Container components = null; public Form1()
{
//
// Windows 窗体设计器支持所必需的
//
InitializeComponent(); //
// TODO: 在 InitializeComponent 调用后添加任何构造函数代码
//
} /// <summary>
/// 清理所有正在使用的资源。
/// </summary>
protected override void Dispose( bool disposing )
{
if( disposing )
{
if (components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
} #region Windows 窗体设计器生成的代码
/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.treeView1 = new System.Windows.Forms.TreeView();
this.dataGrid1 = new System.Windows.Forms.DataGrid();
this.btnLoad = new System.Windows.Forms.Button();
this.dataSet1 = new System.Data.DataSet();
this.dataTable1 = new System.Data.DataTable();
this.dataColumn1 = new System.Data.DataColumn();
this.dataColumn2 = new System.Data.DataColumn();
this.dataColumn3 = new System.Data.DataColumn();
this.dataTable2 = new System.Data.DataTable();
this.dataColumn4 = new System.Data.DataColumn();
this.dataColumn5 = new System.Data.DataColumn();
this.dataColumn6 = new System.Data.DataColumn();
((System.ComponentModel.ISupportInitialize)(this.dataGrid1)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.dataSet1)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.dataTable1)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.dataTable2)).BeginInit();
this.SuspendLayout();
//
// treeView1
//
this.treeView1.ImageIndex = -1;
this.treeView1.Location = new System.Drawing.Point(8, 8);
this.treeView1.Name = "treeView1";
this.treeView1.SelectedImageIndex = -1;
this.treeView1.Size = new System.Drawing.Size(176, 344);
this.treeView1.TabIndex = 0;
this.treeView1.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.treeView1_AfterSelect);
//
// dataGrid1
//
this.dataGrid1.DataMember = "";
this.dataGrid1.HeaderForeColor = System.Drawing.SystemColors.ControlText;
this.dataGrid1.Location = new System.Drawing.Point(188, 8);
this.dataGrid1.Name = "dataGrid1";
this.dataGrid1.Size = new System.Drawing.Size(384, 344);
this.dataGrid1.TabIndex = 1;
//
// btnLoad
//
this.btnLoad.Location = new System.Drawing.Point(496, 356);
this.btnLoad.Name = "btnLoad";
this.btnLoad.Size = new System.Drawing.Size(76, 24);
this.btnLoad.TabIndex = 2;
this.btnLoad.Text = "&Load";
this.btnLoad.Click += new System.EventHandler(this.btnLoad_Click);
//
// dataSet1
//
this.dataSet1.DataSetName = "NewDataSet";
this.dataSet1.Locale = new System.Globalization.CultureInfo("zh-CN");
this.dataSet1.Tables.AddRange(new System.Data.DataTable[] {
this.dataTable1,
this.dataTable2});
//
// dataTable1
//
this.dataTable1.Columns.AddRange(new System.Data.DataColumn[] {
this.dataColumn1,
this.dataColumn2,
this.dataColumn3});
this.dataTable1.TableName = "Table1";
//
// dataColumn1
//
this.dataColumn1.ColumnName = "DeptID";
//
// dataColumn2
//
this.dataColumn2.ColumnName = "DeptName";
//
// dataColumn3
//
this.dataColumn3.ColumnName = "ParentID";
//
// dataTable2
//
this.dataTable2.Columns.AddRange(new System.Data.DataColumn[] {
this.dataColumn4,
this.dataColumn5,
this.dataColumn6});
this.dataTable2.TableName = "Table2";
//
// dataColumn4
//
this.dataColumn4.ColumnName = "Column1";
//
// dataColumn5
//
this.dataColumn5.ColumnName = "Column2";
//
// dataColumn6
//
this.dataColumn6.ColumnName = "Column3";
//
// Form1
//
this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);
this.ClientSize = new System.Drawing.Size(576, 381);
this.Controls.Add(this.btnLoad);
this.Controls.Add(this.dataGrid1);
this.Controls.Add(this.treeView1);
this.Name = "Form1";
this.Text = "Form1";
((System.ComponentModel.ISupportInitialize)(this.dataGrid1)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.dataSet1)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.dataTable1)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.dataTable2)).EndInit();
this.ResumeLayout(false); }
#endregion /// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main()
{
Application.Run(new Form1());
} private void btnLoad_Click(object sender, System.EventArgs e)
{
LoadData();
ShowTree();
}
/// 生成数据
/// </summary>
private void LoadData()
{
dataTable1.Rows.Add(new string[]{"1","A部门","0"});
dataTable1.Rows.Add(new string[]{"2","B部门","0"});
dataTable1.Rows.Add(new string[]{"3","C部门","0"});
dataTable1.Rows.Add(new string[]{"4","D部门","0"}); dataTable1.Rows.Add(new string[]{"5","A1","1"});
dataTable1.Rows.Add(new string[]{"6","A2","1"});
dataTable1.Rows.Add(new string[]{"7","A3","1"}); dataTable1.Rows.Add(new string[]{"8","A11","5"});
dataTable1.Rows.Add(new string[]{"9","A12","5"});
dataTable1.Rows.Add(new string[]{"10","A21","6"}); dataTable1.Rows.Add(new string[]{"11","C1","3"});
dataTable1.Rows.Add(new string[]{"12","C2","3"});
dataTable1.Rows.Add(new string[]{"13","C3","3"});
} /// <summary>
/// 递归取得Tree中某个节点的所有子节点数据
/// </summary>
/// <param name="tn"></param>
private void GetSubData(TreeNode tn)
{
if(tn==null)return;
dataTable1.DefaultView.Sort="ParentID";
DataRowView[] drv=dataTable1.DefaultView.FindRows(((DataRowView)tn.Tag)["DeptID"].ToString());
if(drv.Length>0)
{
tn.Nodes.Clear();
for(int i=0;i<drv.Length;i++)
{
TreeNode tnSub=new TreeNode(drv[i]["DeptName"].ToString());
tnSub.Tag=drv[i];
tn.Nodes.Add(tnSub);
GetSubData(tnSub);
}
}
} /// <summary>
/// 显示Tree
/// </summary>
private void ShowTree()
{
dataTable1.DefaultView.Sort="ParentID";
DataRowView[] drvMain=dataTable1.DefaultView.FindRows("0");
for(int i=0;i<drvMain.Length;i++)
{
TreeNode tn=new TreeNode(drvMain[i]["DeptName"].ToString());
tn.Tag=drvMain[i];
treeView1.Nodes.Add(tn);
GetSubData(tn);
}
}
/// <summary>
/// 节点选择后的数据处理
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void treeView1_AfterSelect(object sender, System.Windows.Forms.TreeViewEventArgs e)
{
dataTable2.Rows.Clear();
DataRowView dtv=(DataRowView)treeView1.SelectedNode.Tag;
DataRow dtrShow=dataTable2.NewRow();
dataTable2.Rows.Add(dtv.Row.ItemArray);
dataGrid1.DataSource=dataTable2.DefaultView;
}
}
}
对不起,能用代码说明么,tree.SelectedNode.Tag是么,还有DataRowView[] drv=dataTable1.DefaultView.FindRows(((DataRowView)tn.Tag)["DeptID"].ToString());里的DeptID是什么意思呢,我现在好像是似懂非懂
DeptID是程序里面定义的数据列.含义是部门ID.
DataRowView[] drv=dataTable1.DefaultView.FindRows(((DataRowView)tn.Tag)["DeptID"].ToString());
这句代码的含义,是将当前节点的部门ID作为条件,查找ParentID等于部门ID的数据.
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;namespace TreeAndGrid
{
/// <summary>
/// Form1 的摘要说明。
/// </summary>
public class Form1 : System.Windows.Forms.Form
{
private System.Windows.Forms.TreeView treeView1; private System.Windows.Forms.DataGrid dataGrid1; private System.Windows.Forms.Button btnLoad; private System.Data.DataSet dataSet1; private System.Data.DataTable dataTable1;
private System.Data.DataColumn dataColumn1;
private System.Data.DataColumn dataColumn2;
private System.Data.DataColumn dataColumn3; private System.Data.DataTable dataTable2;
private System.Data.DataColumn dataColumn4;
private System.Data.DataColumn dataColumn5;
private System.Data.DataColumn dataColumn6;
/// <summary>
/// 必需的设计器变量。
/// </summary>
private System.ComponentModel.Container components = null; public Form1()
{
//
// Windows 窗体设计器支持所必需的
//
InitializeComponent(); //
// TODO: 在 InitializeComponent 调用后添加任何构造函数代码
//
} /// <summary>
/// 清理所有正在使用的资源。
/// </summary>
protected override void Dispose( bool disposing )
{
if( disposing )
{
if (components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
} #region Windows 窗体设计器生成的代码
/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.treeView1 = new System.Windows.Forms.TreeView();
this.dataGrid1 = new System.Windows.Forms.DataGrid();
this.btnLoad = new System.Windows.Forms.Button();
this.dataSet1 = new System.Data.DataSet();
this.dataTable1 = new System.Data.DataTable();
this.dataColumn1 = new System.Data.DataColumn();
this.dataColumn2 = new System.Data.DataColumn();
this.dataColumn3 = new System.Data.DataColumn();
this.dataTable2 = new System.Data.DataTable();
this.dataColumn4 = new System.Data.DataColumn();
this.dataColumn5 = new System.Data.DataColumn();
this.dataColumn6 = new System.Data.DataColumn();
((System.ComponentModel.ISupportInitialize)(this.dataGrid1)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.dataSet1)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.dataTable1)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.dataTable2)).BeginInit();
this.SuspendLayout();
//
// treeView1
//
this.treeView1.ImageIndex = -1;
this.treeView1.Location = new System.Drawing.Point(8, 8);
this.treeView1.Name = "treeView1";
this.treeView1.SelectedImageIndex = -1;
this.treeView1.Size = new System.Drawing.Size(176, 344);
this.treeView1.TabIndex = 0;
this.treeView1.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.treeView1_AfterSelect);
//
// dataGrid1
//
this.dataGrid1.DataMember = "";
this.dataGrid1.HeaderForeColor = System.Drawing.SystemColors.ControlText;
this.dataGrid1.Location = new System.Drawing.Point(188, 8);
this.dataGrid1.Name = "dataGrid1";
this.dataGrid1.Size = new System.Drawing.Size(384, 344);
this.dataGrid1.TabIndex = 1;
//
// btnLoad
//
this.btnLoad.Location = new System.Drawing.Point(496, 356);
this.btnLoad.Name = "btnLoad";
this.btnLoad.Size = new System.Drawing.Size(76, 24);
this.btnLoad.TabIndex = 2;
this.btnLoad.Text = "&Load";
this.btnLoad.Click += new System.EventHandler(this.btnLoad_Click);
//
// dataSet1
//
this.dataSet1.DataSetName = "NewDataSet";
this.dataSet1.Locale = new System.Globalization.CultureInfo("zh-CN");
this.dataSet1.Tables.AddRange(new System.Data.DataTable[] {
this.dataTable1,
this.dataTable2});
//
// dataTable1
//
this.dataTable1.Columns.AddRange(new System.Data.DataColumn[] {
this.dataColumn1,
this.dataColumn2,
this.dataColumn3});
this.dataTable1.TableName = "Table1";
//
// dataColumn1
//
this.dataColumn1.ColumnName = "DeptID";
//
// dataColumn2
//
this.dataColumn2.ColumnName = "DeptName";
//
// dataColumn3
//
this.dataColumn3.ColumnName = "ParentID";
//
// dataTable2
//
this.dataTable2.Columns.AddRange(new System.Data.DataColumn[] {
this.dataColumn4,
this.dataColumn5,
this.dataColumn6});
this.dataTable2.TableName = "Table2";
//
// dataColumn4
//
this.dataColumn4.ColumnName = "Column1";
//
// dataColumn5
//
this.dataColumn5.ColumnName = "Column2";
//
// dataColumn6
//
this.dataColumn6.ColumnName = "Column3";
//
// Form1
//
this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);
this.ClientSize = new System.Drawing.Size(576, 381);
this.Controls.Add(this.btnLoad);
this.Controls.Add(this.dataGrid1);
this.Controls.Add(this.treeView1);
this.Name = "Form1";
this.Text = "Form1";
((System.ComponentModel.ISupportInitialize)(this.dataGrid1)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.dataSet1)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.dataTable1)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.dataTable2)).EndInit();
this.ResumeLayout(false); }
#endregion /// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main()
{
Application.Run(new Form1());
} private void btnLoad_Click(object sender, System.EventArgs e)
{
LoadData();
ShowTree();
}