关于winform的treeview,怎么才能和数据库连接起来,就是说,选中一个节点,就能在datagrid里显示出来相应的数据库里的信息,没有用过treeview,最好能有代码说明,多谢,在线等,解决后马上结账

解决方案 »

  1.   

    http://community.csdn.net/Expert/topic/3856/3856050.xml?temp=3.268069E-02
    不好意思,没做过winForm的。
      

  2.   

    AfterSelect事件可以写获取数据的过程
    AfterSelect事件有TreeViewEventArgs作为参数可以得到当前选择的TreeNode.
      

  3.   

    这里面就涉及三个方面的问题啊!
    1:选择TreeView中的某个节点返回一个信息(Index 或者 Name之类的,不过你肯定需要后者)
    2:从数据库中进行搜索并返回结果到DataSet中去
    3:对DataGrid进行动态的数据绑定,并显示出来
    你是哪个方面不明白?
      

  4.   

    第一步:在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
    ====================================================================
    其中绑定方面有些东西我没有试验过,你自己添加一下就好了!
      

  5.   

    如果是这样的话,完全可以用DataGrid去做。。
      

  6.   

    可是人家要用TreeView做啊!需求不同吗?有时候不一定整合、简单就好!好的解决方案最主要是完全满足客户的需求呀!hoho
      

  7.   

    TREEVIEW在WINFROM下是很简单的.你查一个VS.NET的帮助文档,有详细方式.
      

  8.   

    在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);
    }
    }
      

  9.   

    string sql  = "select ....by " +  treeView.SelectNode.text;
    即可
      

  10.   

    数据库的连接,OLEDB和SQL是一样的么
      

  11.   

    sharonlibra() : lbFileList.Items.Clear();这句话在这里起什么作用阿
      

  12.   

    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; }
    我这么些对么
      

  13.   

    与“System.Data.OleDb.OleDbDataAdapter.OleDbDataAdapter(string, string)”最匹配的重载方法具有一些无效参数
    是什么错误啊
      

  14.   

    你看看参数列表啊!你的myConn是什么类型的呢?
      

  15.   

    已经解决了,应该是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没有数据显示阿
      

  16.   

    还有一段是照上面的写的,我想应该是建一个树吧,我不是很懂,能不能帮我解释一下
    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);
    }
    }
    }
      

  17.   

    datagrid.DataSource=ds.Tables["info"].DefaultView;
    写完这句还应有一句
    datagrid.DataBind();
      

  18.   

    sharonlibra()生成TreeView的方法效率太低。
      

  19.   

    那要怎么才能高效的生成treeview呢,我现在运行后,界面是一片空白阿
      

  20.   

    不晓得,觉得是否表不合理?我做treeview的时候没有那么难的!
      

  21.   

    我就是在form上拉了一个treeview和datagrid,其他的什么都没有设置,在后台的代码就是上面的两段代码,对于treeview的控制,我今天才开始学,关于表,我就是设置了id,jbxm两个字段
      

  22.   

    那不行,我把我写的代码贴出来吧!请大家多指教: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();
    }
      

  23.   

    /// <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;
    }
    }
    }
      

  24.   

    多谢lijipan(多空),关于treeview我有点明白了,可是,datagrid的数据绑定,你是用datatable来显示,我想的是从treeview里来选择一个值,根据这个值来从一个access数据库里来取值啊
      

  25.   

    你可以把数据记录放在treeview的节点数据Tag中,根据选择不同的节点,直接从Tag里边取数据.那样就不用频繁地访问数据库.
      

  26.   

    你可以把数据记录放在treeview的节点数据Tag中,根据选择不同的节点,直接从Tag里边取数据.那样就不用频繁地访问数据库.
    对不起,能用代码说明么,tree.SelectedNode.Tag是么,还有DataRowView[] drv=dataTable1.DefaultView.FindRows(((DataRowView)tn.Tag)["DeptID"].ToString());里的DeptID是什么意思呢,我现在好像是似懂非懂
      

  27.   

    啊,这么多人了,多谢大家的支持阿,lijipan(多空) ,多谢你,可是,我的问题跟trui一样,对于从treeview的tag里取值是不是tree.selectednode.tag.tostring().trim();啊
      

  28.   

    我的代码就是用SelectedNode.Tag的啊.如果不用Tag保存,用ID去查数据库的话,效率就低了.
    DeptID是程序里面定义的数据列.含义是部门ID.
    DataRowView[] drv=dataTable1.DefaultView.FindRows(((DataRowView)tn.Tag)["DeptID"].ToString());
    这句代码的含义,是将当前节点的部门ID作为条件,查找ParentID等于部门ID的数据.
      

  29.   

    就是说,可以把数据表里的关键字段加到tag里,然后就可以从数据库里查到数据了,我这么理解对不对
      

  30.   

    要想树节点加载快,就要在需要展开某个节点的时候再加载这个节点的子节点。至于选中节点时执行SQL查询,TreeNode有个Object类型的属性叫做Tag,没有任何用途,就是让程序员往上挂属性的。可以自定义一个类,包含全部需要的属性,然后挂到节点的Tag上。也可以继承一个TreeNode,里面添加需要的属性、方法,然后加载到树上。
      

  31.   

    那不行,我把我写的代码贴出来吧!请大家多指教: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();
    }
      

  32.   

    也可以这么做.不过我的建议是把一行数据直接放到Tag,选择节点的时候,把Tag取出来,转换以后,放到DataGrid就可以了.不用再到数据库取数据.
      

  33.   

    哦,明白很多了,多谢大家,我还有个跟本贴无关的问题,在winform里打印是不是很麻烦