TreeView مع التحميل عند الطلب عدد كبير من العقد على مستوى واحد

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

سؤال

أنا في موقف أحتاج فيه لعرض شجرة. ومع ذلك ، فإن بعض العقد لديها 35000 عقد طفل (الأطفال المباشر!). هذا بالطبع هو وسيلة لإبطاء من حيث قابلية الاستخدام.

أفضل أن أرى أن الشجرة تحمل فقط تلك العقد المرئية في منفذ عرض المتصفح.

توجد مثل هذه الأشجار لـ WinForms و C ++ ، هل يعرف أي منكم ما إذا كانت هذه الشجرة موجودة لـ ASP.NET؟

نحن نستخدم حاليا Telerik Treeview, ، وهو تحكم جميل ، لكنه لا يدعم الموقف الموصوف.

أسئلة إضافية

من وجهة نظر قابلية الاستخدام: كيف تتعامل مع مثل هذه الأشجار. عرض 35000 عقد على مستوى واحد أمر رائع ، ولكن كيف تجد شيئًا في تلك الشجرة؟ هل تستخدم الترحيل في شجرة؟ أو مربع بحث؟ أو ربما تضيف مستويات إضافية؟

هل كانت مفيدة؟

المحلول

مع العديد من العقد ، حتى لو كان بإمكانك العثور على طريقة أداء لعرضها ، فمن المحتمل ألا يكون المستخدمون قابلاً للاستخدام للغاية من قبل المستخدمين. تخيل محاولة التمرير عبر 35000 عقد فقط للعثور على العقدة التي تهتم بها! الشيء نفسه ينطبق على الترحيل. هل يذهب المستخدم حقًا إلى صفحة 3500 صفحة (على افتراض حجم صفحة 10) للعثور على هدفه؟ ربما لا ، وإذا فعلوا ذلك ، فربما لن يكونوا سعداء للغاية. قون

بدلاً من ذلك ، مع مجموعات بيانات كبيرة مثل هذا ، أجد أنه من الأفضل عادة توفير نوع من واجهة المستخدم "Filter". شيء يمكّن المستخدم من "تشكيل" البيانات المتاحة في مجموعة أكثر قابلية للإدارة.

لست متأكدًا من القدرة التي لديك لتوفير التصفية (أي ما هي الحقول التي قد ترشحها) ، لكنني أعتقد أن هذا هو أفضل رهان لك. خيارات واجهة المستخدم هي:

  1. شيء مثل RadGrid لـ ASP.Net Ajax يمكنه توفير واجهة مستخدم تصفية مدمجة تمكن المستخدمين من العثور بسرعة على القيم التي يهتمون بها.
  2. باستخدام واجهة برمجة تطبيقات من جانب العميل من RadtreeView ودعم تحميل العقد عند الطلب ، يمكنك إنشاء مربع نص من شأنه تصفية العقد في الشجرة كنوع المستخدم. يمكنك ببساطة التعامل مع حدث OnKeyup الخاص بـ TextBox ثم قم بإرسال طلب إلى خدمة ويب للاستيلاء على العقد التي تلبي معايير المرشح ، واستبدال مجموعة عقدة TreeView الخاصة بك بالنتيجة. هذا سيجعله كثير أسهل للمستخدمين للعثور على عقدة الهدف الخاصة بهم.

من الواضح أن هناك طرقًا أخرى أيضًا ، ولكن نأمل أن يمنحك هذا بعض الأفكار.

اجابة قصيرة: بالنسبة لمجموعات البيانات الكبيرة ، كنت أستخدم مجموعة من خدمات التصفية ومواقع الويب في الوقت الفعلي لتقديم نتيجة أكثر قابلية للإدارة لمستخدمي. للتحميل الأولي ، كنت فقط تحميل العقد الأولى (دعنا نقول) 200 للحفاظ على أداء عالية.

أتمنى أن يساعدك هذا! -todd

نصائح أخرى

أعلم أن هناك بعض أدوات التحكم في الأشجار التي تعمل بالطاقة jQuery. لا أعرف الأسماء قبالة اليد. من المؤكد أن التحكم في شجرة ASP.NET لا يدعم هذا لأنه ليس Ajaxifiable. بالنسبة لمشكلة عرض 35000 العقد ، أود أن أضعها مثل هذا.

node
|
-- Sub Node 1
|
-- ...
|
-- Sub Node n
|
-- more...

عندما تحوم أكثر أو تنقر عليها ، فسوف تحصل على المزيد من العقد. إذا كنت تعرض 100 عقدة فرعية ، فسوف أقوم بتحميل 200 وأخفي المائة الآخر. وبهذه الطريقة عندما تحوم أكثر ، يبدو ذلك غارقًا. وفي كل مرة تحوم فيها أكثر ... يتم تحميل 100 Hidden 100 التالي.

وأيضًا ، ليس من الصعب إنشاء عناصر تحكم شجرة مخصصة في الوقت الحاضر مع جميع المتصفحات الصاعدة ، والاستخدام <ul> و <li> متداخل لإنشاء العقد والعقد الفرعية ثم تطبيق التصميم المناسب. ال <li> يمكن أن يكون لديك روابط فيها إذا كنت ترغب في جعل النقر الأسهل.

سنتى.

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