تنفيذ نوع / ميزة الصفحة عند استخدام POCOs مع عناصر تحكم البيانات ASP.net

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

سؤال

وأنا لست مروحة كبيرة من قواعد البيانات ولذا فإنني استخدام POCO لإرجاع البيانات. لقد حققت الترحيل والفرز باستخدام طرق مخصصة التي أقوم بإنشائها لنوع POCO التي تعمل على حجم الصفحة وتعطيني مجموعة من جمع POCO الكامل في وقت واحد، وأنا استخدم الأساليب التي تحقق من وجود اسم DataItem النقر وفرز ل تفعل هذا النوع. إنشاء مثل هذه الأساليب مرارا وتكرارا لكل POCO التي تخطط لاستخدامها مع عنصر تحكم بيانات ASP.net مثل Gridview أمر مؤلم جدا.

هل هناك تقنية لأتمتة هذه لدرجة أنني لست بحاجة لجعل مثل هذه الأساليب في كل مرة لPOCO جديد بحيث أنه يعمل كما لو كنت تستخدم DataTable و؟ أنا يمكن أن توفر بعض مزيد من التوضيح إذا لزم الأمر.

ملحوظة: بعض الناس قد تستدعي POCO كما DTOs

.

تحرير: لقد وجدت هذا المقالة على هذا الموضوع . هل هذه هي الطريقة الوحيدة الممكنة للوصول الى ما أحاول القيام به؟

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

المحلول

وأنا أتفق مع فكرة الفئة الأساسية لأن هذا سيوفر كافة التعليمات البرمجية مكرر. شيء واحد أنا لم يأخذ خطوة في هذا الاتجاه تتمثل في إنشاء فئة للتعامل مع فرز أي قائمة عامة (لDTO / POCO). وهذا ما سمح لي لفرز قائمة في بلدي مقدم أو التعليمات البرمجية الخلفية مع خط 1 فقط من التعليمات البرمجية.

وعادة لSortExpression أعود اسم الخاصية من DTO تريد الفرز على. وبالإضافة إلى ذلك، فإن SortDirection سيكون "الصعود" بسيط أو "تنازليا"

List<Supplier> SupplierList = mSupplierService.GetSuppliers();
SupplierList.Sort(new GenericComparer<Supplier>(mView.SortExpression, mView.SortDirection));
mView.Suppliers = SupplierList;

وهنا هي الطبقة اعتدت

public class GenericComparer<T> : IComparer<T>
 {

     private string mDirection;
     private string mExpression;

     public GenericComparer(string Expression, string Direction)
     {
         mExpression = Expression;
         mDirection = Direction;
     }

     public int Compare(T x, T y)
     {
         PropertyInfo propertyInfo = typeof(T).GetProperty(mExpression);
         IComparable obj1 = (IComparable)propertyInfo.GetValue(x, null);
         IComparable obj2 = (IComparable)propertyInfo.GetValue(y, null);
         if (mDirection == "Ascending") {
             return obj1.CompareTo(obj2);
         }
         else {
             return obj2.CompareTo(obj1);
         }
     }
 }

نصائح أخرى

وأنا خلقت طبقة قاعدة الكيان. بلدي DAOs تستمد منه ولها خصائص المقابلة لأعمدة الجدول (بالنسبة للجزء الأكبر). بلدي DAL بإرجاع قائمة على أي استفسار، وهذا يمكن ربطها إلى GridView.

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