تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
[VB.NET] إضافة فروع إلى TreeView
#1
السلام عليكم أهل المنتدى الكرام
عندى مشكلة لم أجد لها حلاً رغم كثرة البحث عبر الأنترنت وهى باختصار أننى أعمل على مشروع محاسبى وعندى فورم به شجرة الحسابات TreeView وأقوم باستدعاء البيانات من الداتا بيز بسهولة وعمليات الحفظ والحذف كذلك والترى فيو يستقى معلوماته من جدول Accounts من خلال قاعدة بيانات Access 2010
ولكن المشكلة أننى منشئ جدول يسمى Charts وهو عبارة عن جدول مستويات الحسابات من L1 حتى L9 بحيث يكون للمستخدم الحرية فى إدخال عدد الديجيت لكل مستوى من المستويات السابقة
وعليه أريد إضافة النود الجديد أوتوماتيك طبقاً لاختيار المستخدم من الترى فيو سواء اختار نود رئيسى أو نود فرعى فيقوم البرنامج بالنظر فى جدول Charts وتحديد أى مستوى هو وعليه يتم إضافة النود الجديد بترتيبه طبقاً لل Parent
أرفقت برنامج مصغر للمطلوب

للمعلومة قمت بتحويل قاعدة البيانات إلى تنسيق Access 2003


الملفات المرفقة
.rar   Pro.rar (الحجم : 1 م ب / التحميلات : 111)
الرد }}}
تم الشكر بواسطة: ابراهيم ايبو
#2
هل يوجد شئ غير مفهوم من طلبى لأقوم بتوضيحه
الرد }}}
تم الشكر بواسطة: ابراهيم ايبو
#3
و عليكم السلام و رحمة الله و بركاته

المثال المعدل في المرفقات


.rar   ComSys.rar (الحجم : 290.72 ك ب / التحميلات : 58)
الرد }}}
تم الشكر بواسطة: ابراهيم ايبو
#4
(10-07-20, 05:54 AM)Mohamad Anan كتب : و عليكم السلام و رحمة الله و بركاته

المثال المعدل في المرفقات

أشكرك جزيلا اخى على مجهودك ولكن للأسف لم يزبط معى حيث أن الأكواد تعمل فقط مع الجذور(أى الحسابات التى لها أبناء) ولكن عند إضافة أبن لأى جذر تظهر رسالة خطأ "Conversion from type 'DBNull' to type 'String' is not valid." وجرب بنفسك إضافة مثلا نوع حساب جديد تحت بنك القاهرة حساب مرتبات وليكن أسمه جارى مرتبات فلن يقبل ويظهر الخطأ السابق ، كذلك أغفلت فى الأكواد التحقق من مستوى الحساب من خلال جدول Chart وهو المعيار الرئيسى للمضاهاة عند إضافة حساب جديد سواء أكان أب أو أبن أو حفيد
عذراً أخى وفى الأخير أشكرك مرة أخرى على تعبك
الرد }}}
تم الشكر بواسطة: Mohamad Anan
#5
السلام عليكم اخي الكريم
مع جزيل الشكر للاخ محمد عنان لمساعدته في الاجابة
اخي الكريم البرنامج شغال بعد تعديل الاخ محمد وهذه صورة من اضافة نقظة جديدة وللامانة جربت كل المستويات
يبدو ان لديك مشكلة ما لا اعرف


الملفات المرفقة صورة/صور
   
اعمل الخير وأجرك لا تنتظره فالله خير من إليك يرده
البرمجة ليست مجرد كود بل هي منهج تفكير منطقي لحل المشكلات







الرد }}}
تم الشكر بواسطة: Mohamad Anan
#6
(10-07-20, 09:15 PM)freehego كتب :
(10-07-20, 05:54 AM)Mohamad Anan كتب : و عليكم السلام و رحمة الله و بركاته

المثال المعدل في المرفقات

أشكرك جزيلا اخى على مجهودك ولكن للأسف لم يزبط معى حيث أن الأكواد تعمل فقط مع الجذور(أى الحسابات التى لها أبناء) ولكن عند إضافة أبن لأى جذر تظهر رسالة خطأ "Conversion from type 'DBNull' to type 'String' is not valid." وجرب بنفسك إضافة مثلا نوع حساب جديد تحت بنك القاهرة حساب مرتبات وليكن أسمه جارى مرتبات فلن يقبل ويظهر الخطأ السابق ، كذلك أغفلت فى الأكواد التحقق من مستوى الحساب من خلال جدول Chart وهو المعيار الرئيسى للمضاهاة عند إضافة حساب جديد سواء أكان أب أو أبن أو حفيد
عذراً أخى وفى الأخير أشكرك مرة أخرى على تعبك
مرحبا أخي الكريم
بداية الشكر للأستاذ ابراهيم على مروره الكريم
أخي كلامك صحيح تماما لأن تحليل برنامج لمبرمج آخر أصعب من برمجته من الصفر
أسماء الحقول عندك غير واضحة و غير معبرة عن محتواها
أخذت القيم التي وضعتها حضرتك في ادوات النصوص و استخدمت حقولها فقط لإضافة سجل جديد
الترقيم التلقائي لكود الفرع الجديد يعتمد على أعلى كود للأبناء مع اضافة 1 وطبعا سيحدث خطأ عند عدم وجود أبناء
و لو كان ترقيم تلقائي سيحدث تعارض مثلا كود 111 هل هو 11 و 1 او 1 و 11
مهمتك معالجة هذه الامور و منع التكرار لرمز الحساب بالكود لأنك تعتمد بالربط على الرمز و لا تعتمد على معرف ID
اذا تريد ممكن ارفقلك شجرة لا متنهاية بجدول واحد فقط فيه 4 حقول
الرد }}}
تم الشكر بواسطة: ابراهيم ايبو
#7
السلام عليكم ورحمةالله وبركاته
اخي محمد فعلا انا لم انتبه الى هذه الجزئية في حال لايوجد ابناء
ولكن الا يمكننا التحقق اولا من وجود ابناء فان وجد يمكننا الاضافة من الرقم الاكبر +1
وان لم يكن له ابناء نأخذ مرتبة الاب نفسه وضع لها صفر او واحد حسب طريقة الترقيم
اعمل الخير وأجرك لا تنتظره فالله خير من إليك يرده
البرمجة ليست مجرد كود بل هي منهج تفكير منطقي لحل المشكلات







الرد }}}
تم الشكر بواسطة: freehego , Mohamad Anan
#8
(10-07-20, 10:02 PM)ابراهيم ايبو كتب : السلام عليكم ورحمةالله وبركاته
اخي محمد فعلا انا لم انتبه الى هذه الجزئية في حال لايوجد ابناء
ولكن الا يمكننا التحقق اولا من وجود ابناء فان وجد يمكننا الاضافة من الرقم الاكبر +1
وان لم يكن له ابناء نأخذ مرتبة الاب نفسه وضع لها صفر او واحد حسب طريقة الترقيم

اشكرك أخى محمد وأخى إبراهيم ,احب أن أقتبس جملة من كلام الأخ إبراهيم مع التعديل ان سمح لى وهى تلخص ما أريد 
" الاضافة من الرقم الاكبر +1" ولكن أنا أريد تعديلها لتكون " الاضافة من الرقم الاكبر +مستوى الحساب طبقاً لجدول Chart"
حيث أن الإضافة تكون ليست +1 وإنما تكون حسب جدول المستويات فمن الممكن أن تكون +1 أو +2 أو +3 ...الخ
الرد }}}
تم الشكر بواسطة: ابراهيم ايبو
#9
(10-07-20, 10:02 PM)ابراهيم ايبو كتب : السلام عليكم ورحمةالله وبركاته
اخي محمد فعلا انا لم انتبه الى هذه الجزئية في حال لايوجد ابناء
ولكن الا يمكننا التحقق اولا من وجود ابناء فان وجد يمكننا الاضافة من الرقم الاكبر +1
وان لم يكن له ابناء نأخذ مرتبة الاب نفسه وضع لها صفر او واحد حسب طريقة الترقيم

و عليكم السلام و رحمة الله و بركاته
مرحبا استاذ ابراهيم
أخي الكريم عادة يطلب من المستخدم ادخال الرمز و يكون الحقل اختياري
في حال ترك المستخدم مكان الرمز فارغ او كرر رمز مستخدم تعود الخيارات للمبرمج
عادة من المستوى الثالث تكون الزيادة لاول سجل 100 او 1 لا فرق
و الخطأ يحدث من استعلام عن اعلى قيمة لحقل الرمز عندما يتطابق رمز الاب
اذا كانت النتيجة DBNull يمكن ترميز اول حقل عوضا عن زيادة نتيجة الاستعلام
الرد }}}
تم الشكر بواسطة: freehego , ابراهيم ايبو
#10
أنا حاولت بكتابة الكود التالى ولكن لإضافة الحسابات بطريقة يدوية وهى فى حدث المغادرة لتكست كود الحساب

كود :
   Private Sub AccID_Leave(sender As Object, e As EventArgs) Handles AccID.Leave

       Try
           Dim da As New OleDbDataAdapter("select * from Accounts where AccId = " & AccID.Text, con)
           Dim dt As New DataTable
           da.Fill(dt)
           If dt.Rows.Count > 0 Then
               MsgBox("هذا الحساب موجود في دليل الحسابات", vbCritical, "المبرمج ")
               Exit Sub
           End If
           Static myl(9) As Integer
           Dim DA1, DA2, DA3, DA4, DA5, DA6, DA7, DA8, DA9 As New OleDbDataAdapter
           Dim DT1, DT2, DT3, DT4, DT5, DT6, DT7, DT8, DT9 As New DataTable
           Dim mylen, myclen, mylevel, i As Integer
           Dim myac1, myac2 As String
           DA1 = New OleDbDataAdapter("SELECT L1 from Chart", con)
           DA1.Fill(DT1)
           myl(1) = DT1(0)(0)
           DA2 = New OleDbDataAdapter("SELECT L2 from Chart", con)
           DA2.Fill(DT2)
           myl(2) = DT2(0)(0)
           DA3 = New OleDbDataAdapter("SELECT L3 from Chart", con)
           DA3.Fill(DT3)
           myl(3) = DT3(0)(0)
           DA4 = New OleDbDataAdapter("SELECT L4 from Chart", con)
           DA4.Fill(DT4)
           myl(4) = DT4(0)(0)
           DA5 = New OleDbDataAdapter("SELECT L5 from Chart", con)
           DA5.Fill(DT5)
           myl(5) = DT5(0)(0)
           DA6 = New OleDbDataAdapter("SELECT L6 from Chart", con)
           DA6.Fill(DT6)
           myl(6) = DT6(0)(0)
           DA7 = New OleDbDataAdapter("SELECT L7 from Chart", con)
           DA7.Fill(DT7)
           myl(7) = DT7(0)(0)
           DA8 = New OleDbDataAdapter("SELECT L8 from Chart", con)
           DA8.Fill(DT8)
           myl(8) = DT8(0)(0)
           DA9 = New OleDbDataAdapter("SELECT L9 from Chart", con)
           DA9.Fill(DT9)
           myl(9) = DT9(0)(0)
           myac1 = AccID.Text
           mylen = Len(Trim(myac1))
           myclen = 0
           mylevel = 0
           For i = 1 To 9
               myclen = myclen + myl(i)
               If myclen >= mylen Then
                   mylevel = i
                   myclen = myclen - myl(i)
                   myac2 = Strings.Left(myac1, myclen)
                   Exit For
               End If
           Next i
           REM '-----------------------------'
           AccLevel.Text = mylevel
           Dim DAA As New OleDbDataAdapter("select ArAccDes,EnParDes,AccLevel from Accounts where AccID =" & myac2, con)
           Dim DTT As New DataTable
           DAA.Fill(DTT)
           If IsDBNull(DTT(0)(0)) = True Then
               MsgBox("كود الاب غير موجود اختار كود رئيسى صحيح", vbCritical, "رسالة خطأ")
               ParAcc.Text = " "
               ArAccDes.Text = " "
           Else
               ParAcc.Text = myac2
               ArParDes.Text = DTT.Rows(0).Item("ArAccDes")
               EnParDes.Text = DTT.Rows(0).Item("EnParDes")
           End If
           ArAccDes.Focus()
           If IsPrimary.Checked = True Then
               acc_descr.Text = "رئيسى"
           Else
               acc_descr.Text = "فرعى"
           End If
       Catch ex As Exception
           MsgBox(ex.Message)
       End Try

   End Sub
 ولكن أريد تحويله ليتم إضافة الحسابات الجديدة طبقاً لما يتم اختياره من الترى فيو مقارنة بمستواه فى جدول Chart
الرد }}}
تم الشكر بواسطة: ابراهيم ايبو


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  [VB.NET] إضافة أو حذف حقل فى قاعدة بيانات باستخدام كود VB.net AmeenRashed 21 1,226 30-12-23, 03:47 PM
آخر رد: Taha Okla
  Treeview Lathe1 0 196 02-11-23, 02:26 AM
آخر رد: Lathe1
Rainbow [سؤال] إضافة شريط ضبط الكتابة في أداة RichTextBox أبو خالد الشكري 0 230 29-10-23, 08:19 AM
آخر رد: أبو خالد الشكري
Exclamation [SQL] مشكلة إضافة قاعدة بيانات SQL أبو خالد الشكري 6 614 22-08-23, 08:25 PM
آخر رد: أبو خالد الشكري
  إضافة عمودين للداتاجريد قبل نشر ايام الشهر محمد خيري 0 261 15-12-22, 11:28 PM
آخر رد: محمد خيري
  طلب كود إضافة وأزالة البرنامج من قائمة بدء التشغيل سيد درويش 5 877 26-08-22, 12:03 PM
آخر رد: asmarsou
  كود إضافة طالب بالفيجوال كيرلس رفعت 7 1,148 28-05-22, 07:07 PM
آخر رد: أبو خالد الشكري
Question [سؤال] تعبئة TreeView مع جود اكثر من عملية بحث ادخل جدوالين alims 1 1,873 22-05-22, 07:51 PM
آخر رد: samo123456
  إضافة VScrollBar العيدروس 4 1,147 16-03-22, 04:46 PM
آخر رد: العيدروس
Question [سؤال] إضافة مربع بحث للفورم أحمد الغرباوي 5 1,725 14-03-22, 08:55 PM
آخر رد: أحمد الغرباوي

التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم