在项目中以前用过微软的TreeView控件,但是不是很熟悉,现在遇到以下困难,请各位高手帮忙解决,或者推荐一个tree控件。1,可以在后台代码中生成树形结构。
2,单击某个节点时,展开节点,同时折叠起来之前展开的节点。即,一次只能展开一个节点(因为数据比较多)。(这个要求用微软的tree勉强可以实现,就是每次都重新生成整个树,但需要整个页面刷新)3,每个节点下的内容,只在单击该节点时才加载。(这个用微软的tree能实现,但是没有加载子节点的节点在显示出来后,没有“+”号,这点不符合要求)4,单击节点左侧的“+”号,和单击节点文字同样的效果,都是展开所单击的节点,折叠之前的节点。(这个目前还没实现,好像必须打开auto postback)5,每个节点的图标,可以在生成树时在程序中指定。(微软的tree好像可以)6,支持.net 1.1微软的treeview目前遇到的最让人困惑的问题就是焦点问题,单击后焦点一直在根节点上,设置不到当前节点,不知道为什么。

解决方案 »

  1.   

    可以在电驴上下载
    [再接再厉.又一套经典.net控件集-之三].Infragistics.NetAdvantage.2003
    包你满意
      

  2.   

    让你看一些代码,你就明白.
     '------------------------------------------------------------
        ' 名称:btnSelect_Click
        ' 功能描述:通过在文本框内输入工号,在treeview树节点中选中该工号
        ' 参数说明:
        ' 创建人:
        ' 创建时间:2007/12/17 11:39
        '  开发文档标识:    '  文档创建日期:  
        '  功能模块标识: 
        '------------------------------------------------------------ 
        Private Sub btnSelect_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSelect.Click
            Try
                Dim Astrsql As String
                Dim Acmd As New sqlCommand            '判断是否已打开数据库,如果数据库连接已关闭就打开
                If Gcon.State = ConnectionState.Closed Then
                    '从配置文件中读取连接数据库的字符串
                    Gcon.ConnectionString = System.Configuration.ConfigurationSettings.AppSettings("VconStr")
                    Gcon.Open()
                End If            If Trim(Me.txtUserIDselc.Text) = "" Then
                    Me.Response.Write("<script language=""vbs"">alert""请输入工号!""</script>")
                    Page.RegisterStartupScript("focus", "<script language=javascript>document.all('txtUserIDselc').focus()</script>")
                    Exit Sub
                End If            Dim i As Integer
                Dim j As Integer = Me.treeRenShi.Nodes(0).Nodes.Count - 1
                For i = 0 To Me.treeRenShi.Nodes(0).Nodes.Count - 1
                    If Trim(Me.txtUserIDselc.Text) = Trim(Me.treeRenShi.Nodes(0).Nodes.Item(i).ID) Then
                        Me.treeRenShi.SelectedNodeIndex = "0." & i
                        Exit For
                    End If
                Next            If i > j Then
                    Me.Response.Write("<script language=""vbs"">alert""没有您查找的记录!""</script>")
                    Me.treeRenShi.SelectedNodeIndex = ""
                    Me.btnDelete.Enabled = False
                    Me.btnUpdate.Enabled = False
                Else
                    '如果查找记录不为空就令删除和修改按纽设置有效
                    Me.btnDelete.Enabled = True
                    Me.btnUpdate.Enabled = True
                End If
                '调用函数显示索引节点的详细信息
                treeRenShi_Afterselect()
            Catch ex As Exception
                Me.lblMessage.Text = "错误提示:" & ex.Message
            End Try
      

  3.   

      '------------------------------------------------------------
        ' 名称:treeRenShi_Afterselect
        ' 功能描述:选中树节点触发次事件,根据此节点的内容显示其详细信息
        ' 参数说明:
        ' 创建人:
        ' 创建时间:2007/12/17 19:39
        '  开发文档标识: 2007/12/17 19:39
        '  文档创建日期:  
        '  功能模块标识: 
        '------------------------------------------------------------ 
        Private Sub treeRenShi_Afterselect()
            Try
                Dim Astrsql As String
                Dim Acmd As New sqlCommand
                Dim AYGSelIndex As String            '判断是否已打开数据库,如果数据库连接已关闭就打开
                If Gcon.State = ConnectionState.Closed Then
                    '从配置文件中读取连接数据库的字符串
                    Gcon.ConnectionString = System.Configuration.ConfigurationSettings.AppSettings("VconStr")
                    Gcon.Open()
                End If            '获取选中节点处的索引
                AYGSelIndex = Me.treeRenShi.SelectedNodeIndex
               
                '如果没有节点被选择就清除文本框的内容
                If AYGSelIndex = "" Then                '使修改删除按纽无效
                    Me.btnUpdate.Enabled = False
                    Me.btnDelete.Enabled = False                '调用清空所有文本框的函数
                    Clear_text()
                    Exit Sub
                End If
                'Me.ToobRenShi.ToolbarTagName()
                '使修改删除按纽有效
                Me.btnUpdate.Enabled = True
                Me.btnDelete.Enabled = True            Me.treeRenShi.Nodes(0).Nodes.Item(AYGSelIndex).SelectedStyle.GetColor()
                '获取选中节点处的索引的工号
                Me.Session("YGSelIndexID") = Trim(Me.treeRenShi.GetNodeFromIndex(AYGSelIndex).ID)
                Astrsql = "select * from 员工 where 工号='" & Session("YGSelIndexID") & "'"
                Acmd.Connection = Gcon
                Acmd.CommandText = Astrsql
                Dim Ared As sqlDataReader = Acmd.ExecuteReader
                '调用清空所有文本框的函数
                Clear_text()            '在文本框内显示所有属性
                If Ared.Read Then                If Not Ared("工号") Is System.DBNull.Value Then
                        Me.txtUserID.Text = Ared("工号")
                    End If                If Not Ared("姓名") Is System.DBNull.Value Then
                        Me.txtUserName.Text = Ared("姓名")
                    End If                If Not Ared("性别") Is System.DBNull.Value Then
                        Me.txtSex.Text = Ared("性别")
                    End If                If Not Ared("职务") Is System.DBNull.Value Then
                        Me.txtPosition.Text = Ared("职务")
                    End If                If Not Ared("民族") Is System.DBNull.Value Then
                        Me.txtMinzu.Text = Ared("民族")
                    End If                If Not Ared("学历") Is System.DBNull.Value Then
                        Me.txtXueLi.Text = Ared("学历")
                    End If                If Not Ared("专业") Is System.DBNull.Value Then
                        Me.txtZhuanYe.Text = Ared("专业")
                    End If                If Not Ared("籍贯") Is System.DBNull.Value Then
                        Me.txtJiGuan.Text = Ared("籍贯")
                    End If                If Not Ared("毕业院校") Is System.DBNull.Value Then
                        Me.txtBYYX.Text = Ared("毕业院校")
                    End If                If Not Ared("出生日期") Is System.DBNull.Value Then
                        Me.txtBirthday.Text = Ared("出生日期")
                    End If                If Not Ared("雇佣日期") Is System.DBNull.Value Then
                        Me.txtImpolyeDate.Text = Ared("雇佣日期")
                    End If                If Not Ared("Email地址") Is System.DBNull.Value Then
                        Me.txtEmail.Text = Ared("Email地址")
                    End If                If Not Ared("联系方式") Is System.DBNull.Value Then
                        Me.txtLXFS.Text = Ared("联系方式")
                    End If                If Not Ared("身份证号码") Is System.DBNull.Value Then
                        Me.txtSFZHM.Text = Ared("身份证号码")
                    End If                If Not Ared("所属部门") Is System.DBNull.Value Then
                        Me.txtSSBMe.Text = Ared("所属部门")
                    End If                If Not Ared("紧急联系人") Is System.DBNull.Value Then
                        Me.txtJJLXR.Text = Ared("紧急联系人")
                    End If                If Not Ared("婚姻状况") Is System.DBNull.Value Then
                        Me.txtHYZK.Text = Ared("婚姻状况")
                    End If                If Not Ared("身体状况") Is System.DBNull.Value Then
                        Me.txtSTZK.Text = Ared("身体状况")
                    End If                If Not Ared("个人爱好") Is System.DBNull.Value Then
                        Me.txtGRAH.Text = Ared("个人爱好")
                    End If                If Not Ared("个人专长") Is System.DBNull.Value Then
                        Me.txtGRZC.Text = Ared("个人专长")
                    End If                If Not Ared("获奖证书") Is System.DBNull.Value Then
                        Me.txtHJZS.Text = Ared("获奖证书")
                    End If                If Not Ared("处罚记录") Is System.DBNull.Value Then
                        Me.txtCFJL.Text = Ared("处罚记录")
                    End If                If Not Ared("经验") Is System.DBNull.Value Then
                        Me.txtJY.Text = Ared("经验")
                    End If                If Not Ared("照片") Is System.DBNull.Value Then
                        Me.imgZP.ImageUrl = Ared("照片")
                    End If                If Not Ared("描述") Is System.DBNull.Value Then
                        Me.txtMiaoShu.Text = Ared("描述")
                    End If
                End If
                Me.dgRenShi.SelectedItemStyle.Reset()
                Ared.Close()
                Gcon.Close()
            Catch ex As Exception
                Me.lblMessage.Text = "错误提示:" & ex.Message
            End Try
        End Sub
      

  4.   

     '------------------------------------------------------------
        ' 名称:LoadTreeView
        ' 功能描述:用工号填充treeView
        ' 参数说明:
        ' 创建人:
        ' 创建时间:2007/12/17 10:11
        '  开发文档标识: 2007/12/17 10:11
        '  文档创建日期:  
        '  功能模块标识: 
        '------------------------------------------------------------ 
        Private Sub LoadTreeView()
            Try
                Dim Astrsql As String
                Dim Acmd As New sqlCommand
                Dim Aadp As New sqlDataAdapter
                Dim Adst As New DataSet            '判断是否已打开数据库,如果数据库连接已关闭就打开
                If Gcon.State = ConnectionState.Closed Then
                    '从配置文件中读取连接数据库的字符串
                    Gcon.ConnectionString = System.Configuration.ConfigurationSettings.AppSettings("VconStr")
                    Gcon.Open()
                End If            '组织查询工号的sqlClient字符串
                Astrsql = "select 工号,姓名 from 员工 where not ltrim(工号) is null"
                Acmd.CommandText = Astrsql
                Acmd.Connection = Gcon
                Dim Ared As sqlDataReader = Acmd.ExecuteReader            '清除所有节点
                Me.treeRenShi.Nodes(0).Nodes.Clear()
                '循环所有工号            Dim i As Integer = 0
                While Ared.Read
                    '定义树节点
                    Dim GHnode As New TreeNode
                    GHnode.ID = Trim(Ared("工号"))
                    '使节点文本同时显示员工工号和姓名
                    GHnode.Text = Trim(GHnode.ID) & " " & Trim(Ared("姓名"))
                    '为treeview增加节点
                    Me.treeRenShi.Nodes(0).Nodes.Add(GHnode)
                    Me.treeRenShi.Nodes(0).Nodes(i).ImageUrl = "图象\BeBox Watcher.ico"
                    i = i + 1
                End While            '使根节点目录下的所有字节点展开
                Me.treeRenShi.Nodes(0).Expanded = True
                'Ared.Close()
                Gcon.Close()
            Catch ex As Exception
                Me.lblMessage.Text = "错误提示:" & ex.Message
            End Try
        End Sub
      

  5.   

    这是我前些日子写出来的,开始也遇到许多问题,现在都解决了.
    第一个函数:是在文本框内输入工号,如存在该工号,就在treeview中选中.
    第二个函数:使选中的工号记录的内容显示出来
    第三个函数:为treeview填充工号.
    相信你会明白了
      

  6.   

    设置字体大小和颜色
      '设置treeview节点字体的大小
                Me.treeRenShi.DefaultStyle("font-size") = "11pt"
                Me.treeRenShi.DefaultStyle("color") = "blue"
      

  7.   

    忘了最关键的一步,在属性框中设置:
    Treeview.Selectedstyle=color:red;background:#00ff00;
    即选中节点的颜色
      

  8.   

    我用treeview也实现了,不过用了autopostback,如果客户不满意,还得改成javascript树。