呵呵,简单 我有个例子,先将数据库数据转换成XML,然后加到树上,这是我的几个函数! Public Function WriteXmlByDatabase(ByVal MyConnSB As OleDb.OleDbConnection) As String Dim strXml As String If dtTempTable.Columns.Count < 1 Then CreateTempTables() dtTempTable.Clear() Dim cmd As New OleDbCommand() Dim rd As OleDbDataReader Dim myDataRow As DataRow If Not ConnectDb(MyConnSB) Then Exit Function cmd.Connection = MyConnSB cmd.CommandText = " select LDM,LMC,FLDM from WZ_SBL where SCBJ<>'1'" & _ " and substr(XZJGDM,1,8)='" + Mid(GetUnitNoByUserId(MyConnSB, GetLoginUserId), 1, 8) + "' order by LDM " Try rd = cmd.ExecuteReader Catch ex As Exception MessageBox.Show(ex.Message) Exit Function End Try While rd.Read myDataRow = dtTempTable.NewRow() If Not rd.IsDBNull(0) Then myDataRow("ClassNo") = rd.GetValue(0) Else myDataRow("ClassNo") = "" End If If Not rd.IsDBNull(1) Then myDataRow("ClassName") = Trim(rd.GetValue(1)) Else myDataRow("ClassName") = "" End If If Not rd.IsDBNull(2) Then myDataRow("ParentClassNo") = rd.GetValue(2) Else myDataRow("ParentClassNo") = "" End If dtTempTable.Rows.Add(myDataRow) End While rd.Close() '写XML '先找出根节点------父类代码为0或空的 Dim i As Integer Dim strAllXml As String For i = 0 To dtTempTable.Rows.Count - 1 If Trim(dtTempTable.Rows(i)("ParentClassNo")) = "" Or Trim(dtTempTable.Rows(i)("ParentClassNo")) = "0" Then strXml = "<Node text='" + Trim(dtTempTable.Rows(i)("ClassName")) + "' tag='" + Trim(dtTempTable.Rows(i)("ClassNo")) + "'>" strXml = strXml + WriteXml(Trim(dtTempTable.Rows(i)("ClassNo"))) strXml = strXml + "</Node>" strAllXml = strAllXml + strXml End If Next WriteXmlByDatabase = strAllXml End Function Private Function WriteXml(ByVal strParsentClassNo As String) As String Dim i As Integer Dim strXml As String For i = 0 To dtTempTable.Rows.Count - 1 If Trim(dtTempTable.Rows(i)("ParentClassNo")) = Trim(strParsentClassNo) Then strXml = "<Node text='" + Trim(dtTempTable.Rows(i)("ClassName")) + "' tag='" + Trim(dtTempTable.Rows(i)("ClassNo")) + "'>" strXml = strXml + WriteXml(Trim(dtTempTable.Rows(i)("ClassNo"))) strXml = strXml + "</Node>" WriteXml = WriteXml + strXml End If Next End Function Public Sub WriteTreeNode(ByVal nodeTree As TreeNode, ByVal nodeXml As XmlNode) Dim treenode As TreeNode Dim xmlnode As XmlNode Dim i As Integer Dim aa As New TreeNode() aa.Tag = nodeXml.Attributes("tag").Value aa.Text = nodeXml.Attributes("text").Value nodeTree.Nodes.Add(aa) If nodeXml.HasChildNodes Then For i = 0 To nodeXml.ChildNodes.Count - 1 WriteTreeNode(aa, nodeXml.ChildNodes(i)) Next End If End Sub Public Function GetAllChilderNodeTag(ByVal xndTreeNode As TreeNode) As String Dim i As Integer Dim strTmp As String If xndTreeNode Is Nothing Then Exit Function If Trim(xndTreeNode.Tag) <> "" Then strTmp = strTmp + Trim(xndTreeNode.Tag) + "," For i = 0 To xndTreeNode.GetNodeCount(False) - 1 strTmp = strTmp + GetAllChilderNodeTag(xndTreeNode.Nodes(i)) Next GetAllChilderNodeTag = strTmp End Function /************************* strTreeXml = "<?xml version='1.0' encoding='gb2312' ?><RootNode>" + strTreeXml + "</RootNode>" LoadTree(strTreeXml) /************************ Private Sub LoadTree(ByVal strXml As String) Dim doc As New XmlDocument() Dim node As XmlNode doc.LoadXml(strXml) node = doc.SelectSingleNode("RootNode") TreeView1.Nodes.Clear() Dim i As Integer Dim aa As TreeNode aa = TreeView1.Nodes.Add("所有设备类") For i = 0 To node.ChildNodes.Count - 1 WriteTreeNode(aa, node.ChildNodes(i)) Next TreeView1.ExpandAll() End Sub
select LDM,LMC,FLDM from WZ_SBL 中的LDM,LMC,FLDM 和你的ID,Text,ParentID是一样的意思!
to czy412(我想飞!但我没翅膀,唉!) 有没有 C# 版的,VB我不会
to czy412 dtTempTable 是什么类型?
root |---10 |---1001 |---1002 20 |---2001 |---200101 |---200102 TreeNode root = new TreeNode(); root.Text = "root"; TreeNode n10 = new TreeNode("10"); root.Nodes.Add(n10); TreeNode n1001 = new TreeNode("1001"); n10.Nodes.Add(n1001); TreeNode n1002 = new TreeNode("1002"); n10.Nodes.Add(n1002); TreeNode n20 = new TreeNode("20"); root.Nodes.Add(n20); TreeNode n2001 = new TreeNode("2001"); n20.Nodes.Add(n2001); TreeNode n200101 = new TreeNode("200101"); n20.Nodes.Add(n200101); TreeNode n200102 = new TreeNode("200102"); n20.Nodes.Add(n200102); TreeView實例.Nodes.Add(root);
我有个例子,先将数据库数据转换成XML,然后加到树上,这是我的几个函数!
Public Function WriteXmlByDatabase(ByVal MyConnSB As OleDb.OleDbConnection) As String
Dim strXml As String
If dtTempTable.Columns.Count < 1 Then CreateTempTables()
dtTempTable.Clear()
Dim cmd As New OleDbCommand()
Dim rd As OleDbDataReader
Dim myDataRow As DataRow
If Not ConnectDb(MyConnSB) Then Exit Function
cmd.Connection = MyConnSB
cmd.CommandText = " select LDM,LMC,FLDM from WZ_SBL where SCBJ<>'1'" & _
" and substr(XZJGDM,1,8)='" + Mid(GetUnitNoByUserId(MyConnSB, GetLoginUserId), 1, 8) + "' order by LDM "
Try
rd = cmd.ExecuteReader
Catch ex As Exception
MessageBox.Show(ex.Message)
Exit Function
End Try
While rd.Read
myDataRow = dtTempTable.NewRow()
If Not rd.IsDBNull(0) Then
myDataRow("ClassNo") = rd.GetValue(0)
Else
myDataRow("ClassNo") = ""
End If
If Not rd.IsDBNull(1) Then
myDataRow("ClassName") = Trim(rd.GetValue(1))
Else
myDataRow("ClassName") = ""
End If
If Not rd.IsDBNull(2) Then
myDataRow("ParentClassNo") = rd.GetValue(2)
Else
myDataRow("ParentClassNo") = ""
End If
dtTempTable.Rows.Add(myDataRow)
End While
rd.Close() '写XML
'先找出根节点------父类代码为0或空的
Dim i As Integer
Dim strAllXml As String
For i = 0 To dtTempTable.Rows.Count - 1
If Trim(dtTempTable.Rows(i)("ParentClassNo")) = "" Or Trim(dtTempTable.Rows(i)("ParentClassNo")) = "0" Then
strXml = "<Node text='" + Trim(dtTempTable.Rows(i)("ClassName")) + "' tag='" + Trim(dtTempTable.Rows(i)("ClassNo")) + "'>"
strXml = strXml + WriteXml(Trim(dtTempTable.Rows(i)("ClassNo")))
strXml = strXml + "</Node>"
strAllXml = strAllXml + strXml
End If
Next
WriteXmlByDatabase = strAllXml
End Function
Private Function WriteXml(ByVal strParsentClassNo As String) As String
Dim i As Integer
Dim strXml As String
For i = 0 To dtTempTable.Rows.Count - 1
If Trim(dtTempTable.Rows(i)("ParentClassNo")) = Trim(strParsentClassNo) Then
strXml = "<Node text='" + Trim(dtTempTable.Rows(i)("ClassName")) + "' tag='" + Trim(dtTempTable.Rows(i)("ClassNo")) + "'>"
strXml = strXml + WriteXml(Trim(dtTempTable.Rows(i)("ClassNo")))
strXml = strXml + "</Node>"
WriteXml = WriteXml + strXml
End If
Next
End Function Public Sub WriteTreeNode(ByVal nodeTree As TreeNode, ByVal nodeXml As XmlNode)
Dim treenode As TreeNode
Dim xmlnode As XmlNode
Dim i As Integer
Dim aa As New TreeNode()
aa.Tag = nodeXml.Attributes("tag").Value
aa.Text = nodeXml.Attributes("text").Value
nodeTree.Nodes.Add(aa)
If nodeXml.HasChildNodes Then
For i = 0 To nodeXml.ChildNodes.Count - 1
WriteTreeNode(aa, nodeXml.ChildNodes(i))
Next
End If
End Sub Public Function GetAllChilderNodeTag(ByVal xndTreeNode As TreeNode) As String
Dim i As Integer
Dim strTmp As String
If xndTreeNode Is Nothing Then Exit Function
If Trim(xndTreeNode.Tag) <> "" Then strTmp = strTmp + Trim(xndTreeNode.Tag) + ","
For i = 0 To xndTreeNode.GetNodeCount(False) - 1
strTmp = strTmp + GetAllChilderNodeTag(xndTreeNode.Nodes(i))
Next
GetAllChilderNodeTag = strTmp
End Function
/*************************
strTreeXml = "<?xml version='1.0' encoding='gb2312' ?><RootNode>" + strTreeXml + "</RootNode>"
LoadTree(strTreeXml)
/************************
Private Sub LoadTree(ByVal strXml As String)
Dim doc As New XmlDocument()
Dim node As XmlNode
doc.LoadXml(strXml)
node = doc.SelectSingleNode("RootNode")
TreeView1.Nodes.Clear()
Dim i As Integer
Dim aa As TreeNode
aa = TreeView1.Nodes.Add("所有设备类")
For i = 0 To node.ChildNodes.Count - 1
WriteTreeNode(aa, node.ChildNodes(i))
Next
TreeView1.ExpandAll()
End Sub
to czy412 dtTempTable 是什么类型?
|---10
|---1001
|---1002
20
|---2001
|---200101
|---200102
TreeNode root = new TreeNode(); root.Text = "root";
TreeNode n10 = new TreeNode("10"); root.Nodes.Add(n10);
TreeNode n1001 = new TreeNode("1001"); n10.Nodes.Add(n1001);
TreeNode n1002 = new TreeNode("1002"); n10.Nodes.Add(n1002);
TreeNode n20 = new TreeNode("20"); root.Nodes.Add(n20);
TreeNode n2001 = new TreeNode("2001"); n20.Nodes.Add(n2001);
TreeNode n200101 = new TreeNode("200101"); n20.Nodes.Add(n200101);
TreeNode n200102 = new TreeNode("200102"); n20.Nodes.Add(n200102);
TreeView實例.Nodes.Add(root);
dtTempTable 是个我定义的dataTables
{
if(xmlNode.Attributes["text"]!=null)
node.Text=xmlNode.Attributes["text"].Value;
else
node.Text=xmlNode.Name;
if(!xmlNode.HasChildNodes) return;
for(int i=0;i<xmlNode.ChildNodes.Count;i++)
{
TreeNode childNode=new TreeNode();
LoadTreeNode(childNode,xmlNode.ChildNodes[i]);
node.Nodes.Add(childNode);
}
}
public void LoadTree(TreeView treeView,string xmlStr)
{
System.Xml.XmlDocument xmlDocument=new System.Xml.XmlDocument();
xmlDocument.LoadXml(xmlStr);
System.Xml.XmlNode xmlNode=xmlDocument.SelectSingleNode("TreeNodes");
TreeNode rootNode=new TreeNode();
LoadTreeNode(rootNode,xmlNode);
for(int i=0;i<rootNode.Nodes.Count;i++)
treeView.Nodes.Add(rootNode.Nodes[i]);
}
public Form1()
{
string xmlStr="<?xml version='1.0' encoding='gb2312' ?>"+
"<TreeNodes>"+
"<root>"+
"<node1 text=\"10\">"+
"<node2 text=\"1001\"/>"+
"<node3 text=\"1002\"/>"+
"</node1>"+
"<node4 text=\"20\">"+
"<node5 text=\"2001\">"+
"<node6 text=\"200101\"/>"+
"<node7 text=\"200102\"/>"+
"</node5>"+
"</node4>"+
"</root>"+
"</TreeNodes>"; this.LoadTree(this.treeView1,xmlStr);
}