Treeview in ASP + SQL

Программирование Web-приложений и Web-сервисов.

Модератор: Ramzes

elsen
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 117
Зарегистрирован: 05.04.2004 (Пн) 0:23
Откуда: Где то Далеко идут Дожди

Treeview in ASP + SQL

Сообщение elsen » 30.07.2008 (Ср) 10:40

нашел примерчик взял сдесь http://aspalliance.com/articleViewer.as ... 732&pId=-1
, закинул код в проект, но VS2008 ругается на (SqlCommand,SqlDataAdapter,PopulateSubLevel) видимо надо подключит чтото еше помогите разобраться.

elsen
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 117
Зарегистрирован: 05.04.2004 (Пн) 0:23
Откуда: Где то Далеко идут Дожди

Сообщение elsen » 01.08.2008 (Пт) 10:52

помогите найти ошибку,treeview выводит 1 уровень дерева но если кликнуть и вызвать второй уровень то дает ошибку -
Konvertierung des Parameterwertes von TreeNodeCollection in Int32 fehlgeschlagen.

Перевод звучит примерно так
Конвертация значения параметра у TreeNodeCollection in Int32 дало ошибку

Код: Выделить всё
Imports System
Imports System.Data.SqlClient
Imports System.Web
Imports System.Web.UI.WebControls

Partial Public Class _Default
    Inherits System.Web.UI.Page

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        If Not Page.IsPostBack Then
            PopulateRootLevel()
        End If
    End Sub

    Private Sub PopulateRootLevel()

        Dim objConn As New SqlConnection("server=SAPSAN\SQLExpress;Trusted_Connection=true;DATABASE=MSSQL")
        Dim objCommand As New SqlCommand("select KIMJA,KD FROM FH_T_NST_KW_KATEGORIE ", objConn)

        Dim da As New SqlDataAdapter(objCommand)
        Dim dt As New DataTable()
        da.Fill(dt)

        PopulateNodes(dt, TreeView1.Nodes)
    End Sub

    Private Sub PopulateNodes(ByVal dt As DataTable, ByVal nodes As TreeNodeCollection)
        For Each dr As DataRow In dt.Rows
            Dim tn As New TreeNode()
            tn.Text = dr("KIMJA").ToString()
            tn.Value = dr("KD").ToString()
            nodes.Add(tn)

            '   If node has child nodes, then enable on-demand populating
            ' tn.PopulateOnDemand = (CInt(dr("KD")) > 0)
            tn.PopulateOnDemand = CInt(dr("KD"))
        Next
    End Sub

    Private Sub PopulateSubLevel(ByVal parentid As Integer, ByVal parentNode As TreeNode)
        Dim objConn As New SqlConnection("server=sapsan\SQLExpress;Trusted_Connection=true;DATABASE=MSSQL")

        Dim objCommand As New SqlCommand("select SKNAME,BG,  FROM FH_T_NST_HW_SK  where BG = TreeView1.Nodes ", objConn)

        objCommand.Parameters.Add("@BG", SqlDbType.Int).Value = TreeView1.Nodes

        Dim da As New SqlDataAdapter(objCommand)
        Dim dt As New DataTable()
        da.Fill(dt)
        PopulateNodes(dt, parentNode.ChildNodes)
    End Sub

    Protected Sub TreeView1_TreeNodePopulate(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.TreeNodeEventArgs) Handles TreeView1.TreeNodePopulate
        PopulateSubLevel(CInt(e.Node.Value), e.Node)
    End Sub

End Class

Форматирему код !!!(Ramzes)

Ramzes
Скромный человек
Скромный человек
Аватара пользователя
 
Сообщения: 5004
Зарегистрирован: 12.04.2003 (Сб) 11:59
Откуда: Из гробницы :)

Re: Treeview in ASP + SQL

Сообщение Ramzes » 01.08.2008 (Пт) 11:14

elsen писал(а):нашел примерчик взял сдесь http://aspalliance.com/articleViewer.as ... 732&pId=-1
, закинул код в проект, но VS2008 ругается на (SqlCommand,SqlDataAdapter,PopulateSubLevel) видимо надо подключит чтото еше помогите разобраться.

для SqlCommand и SqlDataAdapter надо подключить System.Data.dll
и импортировать пространство имен
System.Data.SqlCLient

во второму посту:
Если ошибка возникает здесь (а очень на то похоже)

Код: Выделить всё
    Protected Sub TreeView1_TreeNodePopulate(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.TreeNodeEventArgs) Handles TreeView1.TreeNodePopulate
        PopulateSubLevel(CInt(e.Node.Value), e.Node)
    End Sub

рекомндую забыть про VB6!
GSerg писал(а):Перед программированием на .net надо сесть в позу лотоса и долго медитировать, очищая сознание от материй, вредных в рамках этой системы.


и сделать так

Код: Выделить всё
    Protected Sub TreeView1_TreeNodePopulate(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.TreeNodeEventArgs) Handles TreeView1.TreeNodePopulate
        Dim i as Integer
        Integer.TryParse(e.Node.Value.ToString(), i)
        PopulateSubLevel(i, e.Node)
    End Sub

elsen
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 117
Зарегистрирован: 05.04.2004 (Пн) 0:23
Откуда: Где то Далеко идут Дожди

Сообщение elsen » 01.08.2008 (Пт) 13:30


Ramzes
Скромный человек
Скромный человек
Аватара пользователя
 
Сообщения: 5004
Зарегистрирован: 12.04.2003 (Сб) 11:59
Откуда: Из гробницы :)

Сообщение Ramzes » 01.08.2008 (Пт) 13:45

я тоже в трансе :?

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Сообщение RayShade » 01.08.2008 (Пт) 14:35

Вообще изначально весь код тупой и неправильный. Ну кто так строит деревья? Для этого же делается один единственный рекурсивный метод, каковой это дерево и заполняет.



Я конечно понимаю, что это там может быть неэкономично с точки зрения преформанса, делать все дерево сразу.



Ну так тогда вынесите метод заполнения конкретной ноды отдельно, а в методе построения дерева предусмотрите ограничение глубины заполнения.



И да, класс SqlDataSource тоже не зря придумывали - на кой хрен тут SqlConnection и SqlCommand?
I don't understand. Sorry.


Вернуться в ASP.NET

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 18

    TopList