سؤال

لديّ وحدة إعداد تقارير في تطبيق ASP.NET WebForms (C#) يستخدم عناصر تحكم ديناميكية للمعلمات لكل تقرير.

تم تصميم هذه عناصر التحكم الديناميكية من عمود XML في SQL Server 2008 DB.

هيكل XML:

<Report Parameters>
    <Parameter>
        <Name>CustomerId</Name>
        <Control />
    </Parameter>
     <Parameter>
        <Name>Start Date</Name>
        <Control>DDL</Control>
    </Parameter>
</Report Parameters>

لقد تركت الكثير من العناصر لقدرة على القراءة.

إذا <Control> العنصر ليس فارغًا (كما في حالة معلمة تاريخ البدء في مثال XML) ، ثم يقوم XSLT Tranformation المستند إلى C# بإنشاء عنصر التحكم المناسب في النموذج الخاص بي.

إذا <Control> العنصر فارغ (كما في حالة CustomerId) ، ثم أريد استخدام خاصية C# موجودة بنفس الاسم (أي لدي عميل محدد في رمز C#).

ثم يتم تمرير قيم المعلمات (CustomerId وتاريخ البدء) إلى إجراء مخزن يستخدم لإنشاء بيانات التقرير.

يمكنني استخدام فئات XPathNavigator والفئات المرتبطة بها في رمز C# الخاص بي لإخراج <Name> عنصر أي <Control> العنصر الفارغ.

المشكلة هي أن <Name> العنصر في شكل سلسلة وأريد حقًا أن يكون في شكل رمز C# (آسف لا يمكن التفكير في طريقة أفضل لوصف هذا!) أي أريد هذا. سلسلة) وليس "CustomerId".

بما أنني لا أعرف عدد التقارير التي سيحصل عليها هذا النظام بمرور الوقت ، فأنا لا أرغب حقًا في بناء عبارة التعداد أو عبارة التبديل إذا كانت "CustomerId" ثم هذا.

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

شكرًا،

ثري.

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

المحلول

ما تبحث عنه هو مولد رمز. على الرغم من أنني لم أقم بتطبيق واحدة بنفسي ، فقد استخدمت قوالب أنشأها الآخرون من قبل وتعمل مثل السحر. يمكنك البدء هنا.

نصائح أخرى

تريد إنشاء فئة ديناميكية وخصائصها بناءً على محتويات XML؟ وتريد ذلك دون الحاجة إلى إنشاء التعليمات البرمجية وإعادة الترجمة أنا متأكد أيضًا. لقد جربت ذلك مرة واحدة ولم أتمكن من العمل.

لا أرى أي حل ، آسف.

هذا يجب أن يفعل ذلك:

this.GetType().GetProperty("CustomerId").SetValue("YourValue");
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top