TreeView数据库绑定问题 急!急!急!急!急!急!急!急!急!急!急!急!急!急!急!急!急!急!急!急!急!
先谢谢各位了!!!!
问题:
根节点显示出来了,子节点出错.我查了半天发现是下面这句(标注******的)没执行,错误提示:未将对象引用设置到对象实例.
表有两个
"学期 "表
学期编号 学期名称
1 aaaa
2 bbbb
3 cccc
"考试 "表
考试编号 学期编号 考试名称 考试信息
1 1 ddd eee
2 1 fff ggg
3 2 hhh iii
Imports System.Data
Imports System.Data.OleDb
Public Class Form2
Inherits System.Windows.Forms.Form
'找出树中当前节点的级数
Public Function NodeLevel(ByVal n As TreeNode) As Byte
Dim i As Byte = 1
Do Until n.Parent Is Nothing
n = n.Parent
i += 1
Loop
Return i
End Function
Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim strConn As String = "provider=Microsoft.jet.OLEDB.4.0;Data Source=信息.mdb "
Dim objConn As New OleDbConnection(strConn)
Dim objCmd As New OleDbCommand
Dim strCmd As String
Try
objConn.Close()
objConn.Open()
strCmd = "select * from 学期 "
objCmd.CommandText = strCmd
objCmd.Connection = objConn
Dim mysqlreader As OleDbDataReader = objCmd.ExecuteReader
TreeView1.Nodes.Clear()
While mysqlreader.Read()
Dim tree_root As New TreeNode
tree_root.Tag = mysqlreader.GetString(0)
tree_root.Text = mysqlreader.GetString(1)
TreeView1.Nodes.Add(tree_root)
End While
Catch ex As Exception
MessageBox.Show(ex.ToString, "数据表根节点载入错误 ")
Finally
objConn.Close()
End Try
TreeView1.ExpandAll()
TreeView1.Select()
End Sub
Private Sub TreeView1_AfterSelect(ByVal sender As System.Object, ByVal e As System.Windows.Forms.TreeViewEventArgs) Handles TreeView1.AfterSelect
Dim strConn As String = "provider=Microsoft.jet.OLEDB.4.0;Data Source=信息.mdb "
Dim objConn As New OleDbConnection(strConn)
Dim objCmd As New OleDbCommand
Dim strCmd As String
If NodeLevel(e.Node).ToString = "1 " Then
If e.Node.GetNodeCount(False) = 0 Then
strCmd = "select * from 考试 where 学期编号= ' " &e.Node.Tag & " ' "
Try
objConn.Open()
objCmd.Connection = objConn
objCmd.CommandText = strCmd
Label1.Text = strCmd
************************************************************************** Dim objReader As OleDbDataReader = objCmd.ExecuteReader
**************************************************************************
While objReader.Read()
Dim leaf_node As TreeNode
leaf_node.Tag = objReader.GetString(0)
leaf_node.Text = objReader.GetString(2)
TreeView1.SelectedNode.Nodes.Add(leaf_node)
End While
Catch ex As Exception
MessageBox.Show(ex.ToString, "数据表子节点载入错误 ")
Finally
objConn.Close()
End Try
End If
End If
End Sub
End Class
[解决办法]
先定义跟数据库打交道的:
Public Class DataBase
Private Const ConnectionStringFormat As String = _
"provider=Microsoft.jet.OLEDB.4.0;Data Source={0} "
Private mdb As String = "信息.mdb "
Public WriteOnly Property File() As String
Set(ByVal value As String)
mdb = value
End Set
End Property
Private Function GetConnection() As OleDb.OleDbConnection
Return New OleDb.OleDbConnection(String.Format(ConnectionStringFormat, mdb))
End Function
Private Function GetCommand(ByVal sql As String) As OleDb.OleDbCommand
Return New OleDb.OleDbCommand(sql, GetConnection)
End Function
Private Function GetDataAdapter(ByVal sql As String) As OleDb.OleDbDataAdapter
Return New OleDb.OleDbDataAdapter(GetCommand(sql))
End Function
Public Sub LoadDataSet(ByVal sql As String, ByVal ds As DataSet)
Using dataAdapter As OleDb.OleDbDataAdapter = GetDataAdapter(sql)
dataAdapter.Fill(ds)
End Using
End Sub
End Class