نمایش نتایج 1 تا 9 از 9

نام تاپیک: اتصال Tree View به دیتابیس (تبدیل سورسVB6 به VB.net بدون استفاده از Wizard)

  1. #1

    اتصال Tree View به دیتابیس (تبدیل سورسVB6 به VB.net بدون استفاده از Wizard)

    باسلام و عرض خسته نباشید خدمت همه دوستان عزیز
    دوستان عزیز من با vb6+access یه سورس کد رو نوشته بودم که تو اون Tree View به دیتابیس متصل میشد
    در این پروژه با استفاده از کتابخانه Adodb این مهم صورت گرفته
    حالا میخوام کمکم کنید تا بتونم عملیات load کردن گره ها در این نمودار و همچنین افزودن گره ها در نمودار با استفاده از اشیاء vb.net (مثل dataadpter ، datatable و...) انجام بشه (عذر خواهی بنده رو بپیذیرید ، چون تو این بخش تازه کارم)
    من توسنتم این کار رو با ویزارد تبدیل سورس کد vb6 به vb.net انجام بدم
    اما همانطور که گفتم هدفم تبدیل توسط ویزارد نیست بلکه میخوام ایم مهم دقیقاً توسط متد های دیتابیسی vb.net انجام بشه
    ممنون میشم راهنماییم کنید
    یاعلی
    فایل های ضمیمه فایل های ضمیمه

  2. #2

    نقل قول: اتصال Tree View به دیتابیس (تبدیل سورسVB6 به VB.net بدون استفاده از Wizard)

    سلام یه سری به این تاپیک بزنید

    https://barnamenevis.org/showthread.p...t=#post1235905

  3. #3

    نقل قول: اتصال Tree View به دیتابیس (تبدیل سورسVB6 به VB.net بدون استفاده از Wizard)

    سلام
    اون تایپیک رو دیده بودم
    همونطور که گفتم من یه مقدار مبتدیم
    میشه ازتون خواهش کنم اون کدها رو نسبت به این پروژه اصلاح بفرمائید؟(یعنی نسبت هب فیلدهی دیتابیسم)
    ممنون میشم ازتون
    یاعلی

  4. #4

    نقل قول: اتصال Tree View به دیتابیس (تبدیل سورسVB6 به VB.net بدون استفاده از Wizard)

    نقل قول نوشته شده توسط ali190 مشاهده تاپیک
    میشه ازتون خواهش کنم اون کدها رو نسبت به این پروژه اصلاح بفرمائید؟(یعنی نسبت هب فیلدهی دیتابیسم)
    سلام ببخشید دیر شد ،من اون کد رو با VB.Net 2010 نوشتم براتون آما راستش من از Vb6 سر درنمیارم و کار نکردم

    البته توی دیتابیستون یه تغییر کوچیک دادم که لازم بود

    Imports System.Data.OleDb
    Public Class Form1
    Public Function InsertNode(ByVal N As TreeNode, ByVal PID As Integer) As Boolean
    Try
    Dim Con As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=|DataDirectory|\database.mdb")
    Con.Open()
    Dim Cmd As New OleDbCommand("SELECT * FROM Nodes WHERE Parent_ID=" + PID.ToString + " ORDER BY ID ", Con)
    Dim Dr As OleDbDataReader = Cmd.ExecuteReader()
    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
    Dr.Close()
    Catch ex As Exception
    MessageBox.Show(ex.Message)
    Finally
    End Try
    End Function
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    InsertNode(Nothing, 0)
    End Sub
    End Class
    فایل های ضمیمه فایل های ضمیمه

  5. #5

    نقل قول: اتصال Tree View به دیتابیس (تبدیل سورسVB6 به VB.net بدون استفاده از Wizard)

    سلام دوستان
    کدهایی که برای ثبت گره نمودار ، لود کردن گره ها و تعیین شماره 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 سازگار کنم
    ممنون و متشکر
    یاعلی

  6. #6

    نقل قول: اتصال Tree View به دیتابیس (تبدیل سورسVB6 به VB.net بدون استفاده از Wizard)

    این کد رو می تونید به این شکل هم استفاده کنید

    While Dr.Read()
    Dim T As New TreeNode(Dr("NodeText").ToString)
    InsertNode(T, Convert.ToInt32(Dr("Id")))
    If N Is Nothing Then
    TreeView1.Nodes.Add(T)
    Else
    N.Nodes.Add(T)
    End If
    End While

  7. #7

    نقل قول: اتصال Tree View به دیتابیس (تبدیل سورسVB6 به VB.net بدون استفاده از Wizard)

    سلام
    میشه بیشتر توضیح بدین
    در کد زیر :
    While Dr.Read() 
    Dim T As New TreeNode(Dr("NodeText").ToString)
    InsertNode(T, Convert.ToInt32(Dr("Id")))
    If N Is Nothing Then
    TreeView1.Nodes.Add(T)
    Else
    N.Nodes.Add(T)
    End If
    End While

    چطور میتونم کلید گره جاری و آیکون انتخابیش رو (طبق توضیحاتم در پست 5) ست کنم؟
    تو این کد انگار در ظاهر فقط کلید گره پدر و تکست SET میشه
    نمیشه این کد رو به فرم زیر نوشت (برای فهم بهتر)

    Do While Not .EOF
    xParent = .Fields("childOf")
    Set xNode = trV.Nodes.Add(xParent, tvwChild, .Fields("nodeId"), .Fields("nodeText"), 1)
    .MoveNext
    Loop

    ممنون و متشکر
    یاعلی

  8. #8

    نقل قول: اتصال Tree View به دیتابیس (تبدیل سورسVB6 به VB.net بدون استفاده از Wizard)

    [QUOTE=ali190;1236625]سلام
    میشه بیشتر توضیح بدین
    در کد زیر :
    While Dr.Read() 
    Dim T As New TreeNode(Dr("NodeText").ToString)
    InsertNode(T, Convert.ToInt32(Dr("Id")))
    If N Is Nothing Then
    TreeView1.Nodes.Add(T)
    Else
    N.Nodes.Add(T)
    End If
    End While


    همون طور که خدمتتون عرض کردم من اصلا VB6 کار نکردم

    کد فوق میاد زیر گره های هر گره رو توی یک TreeNode ذخیره می کنه و بعد اون رو به گره مورد نظر اضافه میکنه

    به شکل تابع بازگشتی عمل میکنه همون طوری که میبینید در خط 3 از خود تابع استفاده شده

  9. #9

    نقل قول: اتصال Tree View به دیتابیس (تبدیل سورسVB6 به VB.net بدون استفاده از Wizard)

    ممنون از توضیحاتتون
    ولی من چطور میتونم با این روش آیکون گره جاری (که در تعریف یک گره یکی از پرامترهای ورودی است) رو SET کنم؟
    ممنو ن و متشکر از لطف شما
    یاعلی

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •