سلام دوستان
کدهایی که برای ثبت گره نمودار ، لود کردن گره ها و تعیین شماره Id گره جدید که میخواهیم ثبتش کنیم رو در اینجا ثبت میکنم تا دوستان کمکم کنند بتونم این ها رو با متدهای موجود در vb.net سازگار کنم
کد اول مربوط میشه به لود نمودن گره ها در نمودار شاخه درخت :
Private Sub local_fillTreeView()
Dim sqlQry As String
Dim xNode As Node
Dim xRsTemp1 As New ADODB.Recordset
Dim xParent As String
trV.Nodes.Clear
Set xNode = trV.Nodes.Add(, , "a", "Main Root", 2)
xNode.Expanded = True
sqlQry = ""
sqlQry = "select * from tblNodes order by nodeLevel, nodeText asc" ' where nodeLevel=1"
xRsTemp1.Open sqlQry, xConStr, adOpenDynamic, adLockOptimistic
With xRsTemp1
If Not .BOF Or Not .EOF Then
Do While Not .EOF
xParent = .Fields("childOf")
Set xNode = trV.Nodes.Add(xParent, tvwChild, .Fields("nodeId"), .Fields("nodeText"), 1)
.MoveNext
Loop
End If
.Close
End With
For Each xNode In trV.Nodes
If xNode.Children = 0 Then
xNode.Image = 3
End If
Next
End Sub
در مورد این تیکه از کد دوست خوبم جناب ircast لطف کردند و این کد رو برام در vb.net نوشتند
اما یه جا برام مبهم مونده
تا اونجایی که اطلاعات از جدول توسط dataadapter خونده میشه رو مشکلی باهاش ندارم
اونجایی که با این مقادیر لود شده treeview رو مقدار دهی میکنه مشکل دارم ، در کدهای vb6 که خودم نوشتم این جوری treeview رو مقدار دهی میکنم:
sqlQry = "select * from tblNodes order by nodeLevel, nodeText asc" ' where nodeLevel=1"
xRsTemp1.Open sqlQry, xConStr, adOpenDynamic, adLockOptimistic
With xRsTemp1
If Not .BOF Or Not .EOF Then
Do While Not .EOF
xParent = .Fields("childOf")
Set xNode = trV.Nodes.Add(xParent, tvwChild, .Fields("nodeId"), .Fields("nodeText"), 1)
.MoveNext
Loop
End If
در واقع برای اینکه گره هام رو تو نمودار set کنم باید مقادیر id گره پدر ، نوع وابستگی (که یه مقدار ثابت هست و نیاز نیست از جایی خونده بشه) ، کلید یا id گره فرزند یا گره جاری ، نام گره جاری (name) و در آخر آیکونی که میخواهیم برای اون گره در نظر گرفته بشه
توسط یک حلقه این مقادیر یک به یک در گرها set میشه:
Do While Not .EOF
xParent = .Fields("childOf")
Set xNode = trV.Nodes.Add(xParent, tvwChild, .Fields("nodeId"), .Fields("nodeText"), 1)
.MoveNext
Loop
کلید یا id گره پدر : .Fields("childOf")
نوع وابستگی (مقدار ثابت) : tvwChild
کلید یا id گره جاری : .Fields("nodeId")
نام یا caption گره جاری : .Fields("nodeText")
آیکون گره جاری (که ترجیحاً یه مقدار ثابت در نظر گرفته شده) : 1
اما در کدی که دوستمون لطف کردند گره ها به صورت زیر مقدار دهی میشوند :
While Dr.Read()
Dim T As New TreeNode(Dr(1).ToString)
InsertNode(T, Convert.ToInt32(Dr(0)))
If N Is Nothing Then
TreeView1.Nodes.Add(T)
Else
N.Nodes.Add(T)
End If
End While
که سر در نمیارم چطور تک تک این پارامترها مقدارشون set شده
میشه لطف بفرمائید جهت خوانا تر شدن بهرت کدها (برای متوجه شدن خودم) این کدهای vb.net رو یه جورایی به فرمت نوشته شده در vb6 در بیارید
(xParent = .Fields("childOf")
Set xNode = trV.Nodes.Add(xParent, tvwChild, .Fields("nodeId"), .Fields("nodeText"), 1
)
اما در مورد تعیین id گره انتخابی هم یه فورمول وجود داره که این مقدار رو از بدست آوردن max id+1 محاسبه میکنه:
Private Function local_generateNumber() As String
Dim xRs3 As New ADODB.Recordset
Dim sqlQry As String
Dim xNewNum As String
Dim xNum As Long
Dim xZero As Integer
Dim xAddZero As String
sqlQry = ""
sqlQry = "select max(nodeId) as xId from tblNodes"
xRs3.Open sqlQry, xConStr, adOpenDynamic, adLockOptimistic
With xRs3
If IsNull(.Fields("xId")) Then
xNum = 1
Else
xNum = Trim(CLng(Right(.Fields("xId"), 9))) + 1
End If
.Close
End With
xZero = 9 - Len(Trim(xNum))
xAddZero = ""
For x = 1 To xZero
xAddZero = xAddZero & "0"
Next
xNewNum = "a" & xAddZero & xNum
local_generateNumber = xNewNum
End Function
اما مهمترین بخش کار که مربوط به وارد کردن اطلاعات گره ها در بانک میشه (نام گرهی را که میخواهیم در دیتابیس ثبت بشه در textbox ای به اسم txtnode وارد میشه)
Private Sub local_saveNode()
Dim sqlQry As String
Dim xLevel As Integer
Dim xNodeId As String
Dim xRsTemp2 As New ADODB.Recordset
Dim xChildOf As String
Dim xNewNodeText As String
If Trim(txtNode.Text) = "" Then
MsgBox "Enter Text"
txtNode.SetFocus
Exit Sub
End If
sqlQry = ""
xChildOf = ""
xNewNodeText = txtNode.Text
xNodeId = local_generateNumber
If Trim(xSelNodeId) = "a" Then
xLevel = 1
xChildOf = xSelNodeId
Else
sqlQry = "select * from tblNodes where nodeId = '" & xSelNodeId & "'"
xRsTemp2.Open sqlQry, xConStr, adOpenDynamic, adLockOptimistic
With xRsTemp2
xLevel = .Fields("nodeLevel") + 1
xChildOf = xSelNodeId
xRsTemp2.Close
End With
End If
sqlQry = ""
sqlQry = "insert into tblNodes (nodeId, nodeText, nodeLevel, childOf) values " & _
"('" & xNodeId & "', '" & xNewNodeText & "'," & xLevel & ", '" & xChildOf & "')"
xCn.Open xConStr
xCn.Execute (sqlQry)
Set xRsTemp2 = Nothing
xCn.Close
' RunTime کدهاي بالا مربوط ميشه به وارد نمودن اطلاعات گره در ديتابيس و کدهاي پايين مربوط ميشه به ايجاد گره به صورت
Me.trV.Nodes.Add trV.SelectedItem.Key, tvwChild, xNodeId, txtNode.Text
End Sub
این کدها تمام حداقل کد های لازم برای ایجاد یک نمودار شاخه درخت متصل به بانک است
ممنون میشم از شما اساتید محترم که کمکم کنید این کدها رو با اصول و تکنیکهای دیتابیسی موجود در vb.net سازگار کنم
ممنون و متشکر
یاعلی