سؤال

أنا ملزمة Ilist إلى GridView. imyinterface يبدو وكأنه

public interface IMyInterface: IHasTotalHours, IHasLines
{
    DateTime GoalStartDate { get; set; }
    DateTime GoalEndDate { get; set; }
}

أرتبط مثيل لشبكة مثل هذا:

IList<IMyInterface> instance= GetMyData();

myGrid.DataSource = instance;
myGrid.DataBind();

عند ربط هذا الشبكة، فإن الأعضاء الوحيدون الذين يظهرون في الشبكة هم الأعضاء المباشرين في IMYInterface: الهدف الأهداف والمراقبة.

لماذا هذا؟ كيف أحصل على الشبكة لعرض أعضاء الواجهات الأخرى التي يرثها؟

تحديثالواجهات الموروثة تحدد خصائص البيانات البسيطة مثل

public interface IHasTotalHours
{
    string Description { get; set; }
    int Hours{ get; set; }
}
public interface IHasLines
{
    double TotalLines { get; set; }
    double LinesPerHour { get; set; }
}

هناك فئة تنفذ IMYInterface:

public class MyClass : IMyInterface
{
    public string Description { get; set; }
    public int Hours { get; set; }
    public double TotalLines { get; set; }
    public double LinesPerHour { get; set; }
    public DateTime GoalStartDate { get; set; }
    public DateTime GoalEndDate { get; set; }

}

يتم إلقاء هذه imyinterface، وعادت في القائمة التي أرملها إلى GridView.

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

المحلول

لا تستخدم عناصر التحكم المنضم للبيانات انعكاس ولكن تطبيق مطبوع للحصول على خصائص من مصدر البيانات. في ال typedescriptor.getproperties. الطريقة، يمكنك قراءة ما يلي:

يمكن أن تختلف خصائص المكون من خصائص الفصل، لأن الموقع يمكنه إضافة أو إزالة الخصائص إذا كان المكون مخصص.

على ما يبدو سيتم تنفيذ التطبيق الافتراضي فقط الخصائص المباشرة فقط من واجهة وليس تلك الموروثة.

لحسن الحظ هذه الآلية مقدرة، ويمكنك كتابة Typeconverter. فئة مع تنفيذ معلومات الملكية المخصصة. يرجى الرجوع إلى هذه الملاحظات في وثائق Typeconverter لتنفيذ منطق الملكية.

يمكن لتنفيذ GetProperties من فئة Typeconverter المخصصة الاتصال بنظام TypedEScriptor.getProperties (النوع) على واجهةك وجميع واجهات موروثة. ولكن ربما يمكنك حتى كتابة typeconverter عام من شأنه العثور على جميع الخصائص الموروثة باستخدام الانعكاس.

ثم تقوم بإرفاق هذا Typeconverter المخصص على واجهةك باستخدام سمة typeconverterattribute.

ثم، مثل السحر، سيجد مصدر البيانات جميع الخصائص. ؛-)

نصائح أخرى

ذلك لأن الواجهة هي عقد، وهذه هي الطريقة الوحيدة للتفاعل مع كائن من خلال هذا العقد المحدد. لا يمكن افتراض الواجهات الأخرى ولا يمكن استخدامها حتى يتم تقديمها.

لذلك عند ربط قائمة T إلى شيء ما، لا يعرف DataGrid عن تلك الواجهات الأخرى. ولم يكن DataGrid لن يستخدم التفكير لمعرفة ما يمكن أن تورث الطبقات أو الواجهات الأخرى. تتمثل خصائص الكائنات الوحيدة التي ستكون متاحة ل DataGrid هي الخصائص التي تكتشفها واجهة T.

تحتاج إلى ربط قائمة إذا كنت ترغب في الوصول إلى DataGrid الوصول إلى جميع الخصائص.

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