سؤال

لدي شبكة Devexpress (Devexpress.xtragrid.gridcontrol 8.2) مع مجموعة بيانات في وقت التشغيل مثل ذلك:

private DataContext db = new DataContext("connection string");
gridControl.DataSource = from t in db.sometable
                          select new
                          {
                              Field1 = t.Name,
                              Field2 = t.Email,
                              Field3 = t.City
                          };

هذا يعني أن العرض ليس له فكرة عما سيظهره البيانات في وقت التصميم. أحب أن أكون قادرا على تعيين استعلام LINQ كمستحضر بيانات، لكنني أود أيضا تحديد ما سيبدو منه العرض في وقت التصميم.

  • هل هناك طريقة يمكنني إخبار الرأي بأنه سيتم استخدام هذا الاستعلام؟
  • هل سيكون أفضل حل لإنشاء كائن صغير لعقد محتويات ما يتم إرجاعه من هذا الاستعلام؟
هل كانت مفيدة؟

المحلول

سيتعين عليك تحديد فئة لنوع الإرجاع لاستعلام LINQ الخاص بك إذا كنت تريد شبكة DeveXpress لالتقاط الأعمدة تلقائيا لمصدر البيانات. في وقت التصميم، يستخدم محرك ربط WinForm Infection أو ISUSTOMTYPUSTTORTOR إذا كان المصدر ينفذه لاستكشاف الخصائص، وأنواعها، إلخ مصدر البيانات. تستخدم شبكة Devexpress هذه آلية التوصيل الأساسية وتوليد الأعمدة تلقائيا لك في وقت التصميم بناء على معلومات العقار. ومع ذلك، في حالتك، فأنت تقوم بإنشاء نوع مجهول في استعلام LINQ الخاص بك غير معروف أو متاح في وقت التصميم. لذلك، لا يمكن لشبكة Devexress إنشاء الأعمدة تلقائيا. كما ذكرdnis المذكورة، يمكنك إضافة أعمدة يدويا إلى الشبكة الموجودة في المصمم. تحتاج إلى التأكد من أن "اسم الحقل"، وأعتقد، على العمود يطابق اسم الخاصية على مصدر البيانات الخاص بك.

إذا ذهبت مع فئة، فقد ترغب أيضا في تطبيق InotifyPropertyChanged لجعل الشبكة تدرك تغييرات البيانات في مصدر البيانات.

نصائح أخرى

IIRC، يتطلب Xtragrid أن تقوم مصدر البيانات بتنفيذ واجهة تنقلات (IE IBindinglist (T)) لذلك لإنشاء الأعمدة التلقائية والعناصر يجب أن تنفذ InotifyPropertychanged.

مع وضع ذلك في الاعتبار: إذا قمت بإنشاء أعمدة عبر المعالج في وقت التصميم أو في التعليمات البرمجية في وقت التشغيل، طالما قمت بتعيين خاصية الاسم الحقلي للأعمدة، فسوف تظهر البيانات من DataSource مع خاصية هذا الاسم.

ملاحظات:

  • أعتقد أنه يجب أن يكون عقارا أو السيارات أم لا، كما وجدت أنه في بعض الأحيان لن يربط المتغيرات العامة.
  • يجب تعيين خاصية شيء (افتراضي أو غير ذلك).
  • يجب أن يكون هناك منشئ بلا معنى لهذا البند.

المعروف الحقول في وقت التصميم (Field1، Field2، Field3).

وفق devexpress. يمكنك استخدام IList, IListSource, ITypedList أو IBindingList. وبعد الفرق بينهما هو ما إذا كان يمكنك إضافة صفوف جديدة أو إذا كانت التغييرات تدف التحكم.

حتى تتمكن من استخدام Tolist ():

private DataContext db = new DataContext("connection string");
gridControl.DataSource = (from t in db.sometable
                         select new
                         {
                             Field1 = t.Name,
                             Field2 = t.Email,
                             Field3 = t.City
                         }).ToList();

ملحوظة: اختبرته باستخدام Devexpress 10.1، ولكن إذا كان يستخدم Winforms ملزمة ثم يجب أن لا تزال تعمل وفقا MSDN..

لم أعمل مع شبكة Devexpress، لكنني فعلت الكثير مع .NET DataGridView.

هل تحتوي شبكة Devexpress على نفس الوظيفة مثل .NET DataGridView التي يولدها Auto الأعمدة؟

إذا كان الأمر كذلك، فينبغي أن يعرض أي حقول موجودة في استفسارك وسوف تستخدم Field1، Field2 والحقل 3 (من رمز المثال الخاص بك) كأسماء للأعمدة.

أو مجرد إيقاف تشغيل ميزة إنشاء العمود التلقائي وإضافة الأعمدة في وقت التصميم. طالما أنها تطابق ما يعوده الاستعلام الخاص بك يجب أن تعمل بشكل جيد.

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