ما هي أفضل طريقة لتخزين البيانات على عقدة Treeview؟
-
23-08-2019 - |
سؤال
تعد TreeView طريقة لطيفة لتقديم هرمي للمستخدمين، ولكن تخيل السيناريو التالي مع التسلسل الهرمي الذي تم تصويره أدناه:
Building 1
-Tenant 1
- Payment 1
- Payment 2
Building 2
-Tenant 1
- Payment 1
-Tenant 2
- Payment 1
- Payment 2
حيث تحتاج إلى إجراء إدراج قاعدة بيانات عند النقر فوق المستخدم على عقدة الدفع. أساسا المتغيرات المطلوبة للإدراج هي Building_id، tenant_id، payment_id. طريقة واحدة لتجميع هذه هي المشي إلى الوالد من كل عقدة:
Building_Id = Payment.ParentNode.ParentNode.Id
هل من الأفضل تخزين جميع قيم المعرف الموجود في عقدة الدفع بالتنسيق التالي، ثم تحليل قيم building_id، tenant_id، payment_id؟ علي سبيل المثال:
Payment.Value = "1|2|1"
المحلول
أجد أفضل طريقة للتعامل مع البيانات الإضافية هي TreeNode Subclass. أقوم بإنشاء فئة Basenode التي تحتوي على البيانات المشتركة التي أرغب في صيانةها، ورثت أبعد من ذلك عن أي أنواع عقدة محددة.
قيمة الفئة الفرعية هي أنه يمكنك الحفاظ على أنواع البيانات القوية وأنواع البيانات المعقدة تماما مثل أي فئة أخرى ... التي تتجنب صفائف القرصنة في سلسلة مع فواصل الأنابيب وما شابه ذلك.
بمجرد أن تكون لديك العقد الخاصة بك في مكانها، تتيح نفس الشجرة المشي التي تقترحها، إلا أنك الآن تسحب القيم من (Say) Basenode.mydata (التي سترثها جميعها كل فروعك الفرعية).
شيء واحد لمشاهدته إذا فعلت ذلك على الرغم من ذلك: تحتاج إلى فهم مدى موثوقية هذه العقد. في حالتي، عندما يقوم المستخدم بالتنقل إلى الشجرة، نتحقق من ذاكرة التخزين المؤقت لقاعدة البيانات للتأكد من أننا لا نحتاج إلى إعادة النظر في البيانات.
نصائح أخرى
إذا كان TreeNodes
التابع TreeView
السيطرة لديك أ Tag
الخاصية التي تحمل كائن، يمكنك ربط كائن مخصص يحتوي على الخصائص المرجوة مع كل منها TreeNode
علامة، ثم يمكنك الوصول إليها حسب الضرورة.
على سبيل المثال، في .Net
اعتبارا من 4.5، سيكون مثل هذا:
myTreeNode.Tag = myObject;
أين myTreeNode
هو مثال من TreeNode
و myObject
هو مثيل الكائن المخصص الذي حددته يحتوي على البيانات التي ترغب في ارتباطها TreeNode
من الخاص بك TreeView
.
فيما يلي مقالة حول MSDN على خاصية Tereenode.tag: MSDN - Treenode.tag.
قد تفكر في أخذ فكرة Godeke بدلا من تصنيف Tereenode، وبدلا من تصنيف العقد إلى مجموعة كائن أعمال - تخزين بياناتك المحلية في خصائص أطفال المجموعة. سيتمكن منطق المجموعة من إعطائك البيانات التي تحتاجها وتحصل على فوائد فصل البيانات والمنطق من طبقة العرض التقديمي.