سؤال

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

وجئت بقدر كتابة الدرجة الفعلية، وأنه من الممكن أن فئة فرعية من دروبدوونليست ولكن أنا غير قادر على تسجيل الملف في صفحة ASP.NET بلدي واستخدامه في عرض المصدر. ربما أنا في عداد المفقودين بعض الخصائص في صفي؟

وأي أفكار؟

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

المحلول

وأنت ترغب في تمديد دروبدوونليست في عنصر تحكم مخصص ... لا على UserControl.

وإنشاء الجديدة الدرجة مشروع المكتبة دعا MyLibrary.

وإضافة فئة تسمى MyDropDownList.cs

namespace My.Namespace.Controls
{
[ToolboxData("<{0}:MyDropDownList runat=\"server\"></{0}:MyDropDownList>")]
public class MyDropDownList: DropDownList
{
    // your custom code goes here
    // e.g.
    protected override void  RenderContents(HtmlTextWriter writer)
    {
        //Your own render code
    }
}
}

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

وعلى tagprefix في الملف web.config الخاص بك

    <add tagPrefix="my" namespace="My.Namespace.Controls" assembly="MyLibrary" />

وهذا يجب أن تسمح لك لإضافة هذا ASPX الخاص بك / ASCX و

<my:MyDropDownList ID="myDDl" runat="server">
    ...
</my:MyDropDownList>

نصائح أخرى

في تعليق، لك أن توضح هدفك: "إن الشيء الوحيد الذي أريد القيام به مع أنه هو إضافة خاصية InitialValue الذي يحدد القيمة الأولى التي هي دائما موجودة في DDL"

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

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

    public static void BindListControl (ListControl ctl, SqlDataReader dr,
        String textColumn, String valueColumn, bool addBlankRow, string blankRowText)
    {
        ctl.Items.Clear();
        ctl.DataSource = dr;
        ctl.DataTextField = textColumn;
        ctl.DataValueField = valueColumn;
        ctl.DataBind();

        if (addBlankRow == true) ctl.Items.Insert(0, blankRowText);
    }

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

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