VBNET2008在运行时使用DataReader填充TREEVIEW控件 [英] VBNET2008 Using DataReader to fill TREEVIEW control at Runtime

查看:73
本文介绍了VBNET2008在运行时使用DataReader填充TREEVIEW控件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

Hullo Good Guys,
我正在使用
使用VBNET2008,DataReader和TreeView的Window应用程序
我需要您的帮助,请帮助我.


我正在尝试在运行时使用DATAREADER填充TreeView控件
我正在使用TreeView控件,并且在进行编码时遇到了问题,因为我以前没有做过.

列出的beow是SQL字符串及其结果.还有TreeView的图形显示

SQL字符串:
SELECT OrderID,OrderDate ProductID
从发票在哪里(CustomerID ="Chops")按OrderID订购,Orderdate
SQL字符串的结果

OrderId OrderDate ProdID
10254 11/07/1996 74
10254 11/07/1996 24
10254 11/07/1996 55
10254 13/07/1996 203
10254 13/07/1996 112
10370 13/12/1996 74
10370 1996年3月12日1
10370 1996年3月12日64
10370 1996年3月12日56
10519 28/04/1997 10
10519 28/04/1997 60

TreeView显示格式
图形外观看起来像


10254 =>父节点
1996年11月7日=>子节点
74 =======> GrandChild节点
24
55
13/07/1996 =>子节点
203 ====> GrandChild节点
112
10370 =>父节点

1996年3月12日=>子节点
74 ====> GrandChild节点
1
64
56




下面列出的是我无法正常工作的编码

Hullo Good Guys,
I am using
Window Application using VBNET2008, DataReader and TreeView
I need your help, Please help me.


I am trying to use DATAREADER to fill the TreeView control during Runtime
I am using TreeView controls and having problem doing the coding as I have not done it before.

Listed beow are the SQL String and the result of it. And also the graphic drawing of TreeView display

SQL String :
SELECT OrderID, OrderDate ProductID
FROM Invoices WHERE (CustomerID = ''Chops'') Order by OrderID, Orderdate
Result of SQL String

OrderId OrderDate ProdID
10254 11/07/1996 74
10254 11/07/1996 24
10254 11/07/1996 55
10254 13/07/1996 203
10254 13/07/1996 112
10370 13/12/1996 74
10370 03/12/1996 1
10370 03/12/1996 64
10370 03/12/1996 56
10519 28/04/1997 10
10519 28/04/1997 60

TreeView Display Format
Graphic drawing of how it should look like


10254 => Parent node
11/07/1996 =>Child node
74 =======> GrandChild node
24
55
13/07/1996 =>Child node
203 ====> GrandChild node
112
10370 => Parent node

03/12/1996 =>Child node
74 ====> GrandChild node
1
64
56




Listing below are my non working coding

<pre lang="vb">Private Sub btnDisplayTreeView_Click(ByVal sender As System.Object,
      ByVal e As System.EventArgs) Handles btnDisplayTreeView.Click

    '' --variable to determine NEW NODE ---
    Dim intOrderID As Integer = 0
    Dim DteOrderDate As Date = Nothing
    Dim intNode As Integer = 0
    Dim intSubNode As Integer = 1


    Dim strsql As String = Nothing

    strsql &= "Select  OrderID, Convert(varchar(10), OrderDate, 103) as [OrderDate], ProductID "
    strsql &= " From OrderInvoices "
    strsql &= " Where (CustomerID = N''" + strCustId + "'' )"
    strsql &= " And ( OrderDate between @sDate and @eDate) "
    strsql &= " Order by OrderId, OrderDate "

   ''define data object
    sqlconn = New SqlConnection(connstr)
    sqlcmd = New SqlCommand(strsql, sqlconn)
    sqlcmd.Connection.Open()

    ''using sqlcmd parameter
    With sqlcmd
       .CommandText = strsql
       .Parameters.Add("@sDate", SqlDbType.DateTime).Value = strFromDate
       .Parameters.Add("@eDate", SqlDbType.DateTime).Value = strToDate
    End With
    DR = sqlcmd.ExecuteReader()

    With Me.TreeViewInvoice
     .BeginUpdate()

      While (DR.Read())





推荐答案

Hi OriginalGriff
谢谢您的帮助.

令我惊讶的是,我确实在原始帖子中发布了代码.显然,整体编码太多,无法完全显示.

以下是编码的延续:

Hi OriginalGriff
Thank you for trying to help me.

I am surprise the I did posted the coding in my original posting. Apparently, the overall coding are too much and it does not display all of it.

Here are the continuation of the coding:

<pre lang="sql">
With Me.TreeViewInvoice
 .BeginUpdate()

  While (DR.Read())
  If (DR.Item("OrderID")<> intOrderID) Then
    intNode += 0
    intOrderID = DR.Item("OrderID")

    '' ---- Parent ---OrderID
    .Nodes.Add(DR.Item("OrderID"))  
       Else
           ''---- Child Level ----Order Date
      If (DR.Item("OrderDate").ToString <> DteOrderDate.ToShortDateString) Then
DteOrderDate = Date.Parse(DR.Item("OrderDate").ToString)

     ''--- Child ---
    .Nodes(intNode).Nodes.Add(DR.Item("OrderDate"))   '' --child
           End If
           ''---- GrandChild Level ----ProductId
           .Nodes(intNode).Nodes(intSubNode).Nodes.Add(DR.Item("ProductID"))

    End If
 End While

 End With
     DR.Close()
     sqlconn.Close()
     sqlcmd.Dispose()






Hullo Friends,
谢谢您的帮助.

最后,我解决了编码问题.我在每条备用编码行上都使用了Debugging来评估事件,并注意到问题是由TreeView父节点,子节点和孙子节点索引引起的.

这是我正在此处发布的工作代码,以与遇到类似问题的其他新手分享:

私人子FFillTreeViewNode()

Dim intOrderID As Integer = 0
Dim dteOrderDate As String = String.Empty
Dim intCNode As Integer = 0
将Dim intGCNode设置为Integer = 0
昏暗bolJustNewParent为布尔值= True

昏暗的strsql作为字符串
strsql =选择OrderID,Convert(varchar(10),OrderDate,103)作为[OrderDate],产品ID"
strsql + ="来自TbleSales发票"
strsql + ="哪里(CustomerID =``Chops'')''
strsql + ="按OrderID,OrderDate排序"

sqlconn =新的SqlConnection(connstr)
sqlcmd =新的SqlCommand(strsql,sqlconn)
sqlcmd.Connection.Open()
DR = sqlcmd.ExecuteReader

While(DR.Read())

如果(DR.Item("OrderID")<> intOrderID)那么

如果bolJustNewParent = True,那么
bolJustNewParent = False
其他
intCNode + = 1
intGCNode = 0
如果结束

''---父母---
Me.TreeViewTest.Nodes.Add(DR.Item("OrderID").ToString)
intOrderID = DR.Item("OrderID"")

''-儿童-
Me.TreeViewTest.Nodes(intCNode).Nodes.Add(DR.Item("OrderDate").ToString)
dteOrderDate = DR.Item("OrderDate"").ToString
如果结束

''---孩子---
如果是(DR.Item("OrderDate").ToString<> dteOrderDate),则

Me.TreeViewTest.Nodes(intCNode).Nodes.Add(DR.Item("OrderDate").ToString)
dteOrderDate = DR.Item("OrderDate"").ToString
intGCNode + = 1

如果intOrderID<> DR.Item("OrderID"")然后
intCNode + = 1
如果结束

如果结束
''---孙子
Me.TreeViewTest.Nodes(intCNode).Nodes(intGCNode).Nodes.Add(DR.Item("ProductID"))
结束时

sqlconn.Close()
DR.Close()
sqlcmd.Dispose()
结束子


私有子TreeViewTest_AfterSelect(ByVal发送者为System.Object,
ByVal e As System.Windows.Forms.TreeViewEventArgs)处理TreeViewTest.AfterSelect
Me.txtTVItem.Text = Me.TreeViewTest.SelectedNode.FullPath.ToString
结束Sub
Hullo Friends,
Thank you for your help.

Finally, I have solved the coding problems. I was using Debugging on every alternate coding lines to evaluate the events and noticed that the problems were caused by TreeView Parent Nodes, Child Nodes and Grandchild Nodes indexes.

Here are the working coding I am posting it here to share with other Newbies who have similar problems:

Private Sub FFillTreeViewNode()

Dim intOrderID As Integer = 0
Dim dteOrderDate As String = String.Empty
Dim intCNode As Integer = 0
Dim intGCNode As Integer = 0
Dim bolJustNewParent As Boolean = True

Dim strsql As String
strsql = "Select OrderID, Convert(varchar(10), OrderDate, 103) as [OrderDate], ProductID "
strsql += " From TbleSalesInvoices "
strsql += " Where (CustomerID = ''Chops'' )"
strsql += " Order By OrderID, OrderDate "

sqlconn = New SqlConnection(connstr)
sqlcmd = New SqlCommand(strsql, sqlconn)
sqlcmd.Connection.Open()
DR = sqlcmd.ExecuteReader

While (DR.Read())

If (DR.Item("OrderID") <> intOrderID)Then

If bolJustNewParent = True Then
bolJustNewParent = False
Else
intCNode += 1
intGCNode = 0
End If

''--- Parent ---
Me.TreeViewTest.Nodes.Add(DR.Item("OrderID").ToString)
intOrderID = DR.Item("OrderID")

''--- Child ----
Me.TreeViewTest.Nodes(intCNode).Nodes.Add(DR.Item("OrderDate").ToString)
dteOrderDate = DR.Item("OrderDate").ToString
End If

'' --- Child ---
If (DR.Item("OrderDate").ToString <> dteOrderDate) Then

Me.TreeViewTest.Nodes(intCNode).Nodes.Add(DR.Item("OrderDate").ToString)
dteOrderDate = DR.Item("OrderDate").ToString
intGCNode += 1

If intOrderID <> DR.Item("OrderID") Then
intCNode += 1
End If

End If
''---grandchild
Me.TreeViewTest.Nodes(intCNode).Nodes(intGCNode).Nodes.Add(DR.Item("ProductID"))
End While

sqlconn.Close()
DR.Close()
sqlcmd.Dispose()
End Sub


Private Sub TreeViewTest_AfterSelect(ByVal sender As System.Object,
ByVal e As System.Windows.Forms.TreeViewEventArgs) Handles TreeViewTest.AfterSelect
Me.txtTVItem.Text = Me.TreeViewTest.SelectedNode.FullPath.ToString
End Sub


这篇关于VBNET2008在运行时使用DataReader填充TREEVIEW控件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆