ما هي أفضل طريقة لتخزين البيانات على عقدة Treeview؟

StackOverflow https://stackoverflow.com/questions/548129

سؤال

تعد 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، وبدلا من تصنيف العقد إلى مجموعة كائن أعمال - تخزين بياناتك المحلية في خصائص أطفال المجموعة. سيتمكن منطق المجموعة من إعطائك البيانات التي تحتاجها وتحصل على فوائد فصل البيانات والمنطق من طبقة العرض التقديمي.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top