تحرير وسرد متجهة إلى نوع التعداد القيم حين وجود أيضا "فارغة" الدخول ؟

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

سؤال

إذا كنت ربط WinForms تحرير وسرد إلى نوع التعداد القيم ، أي

combo1.DropDownStyle = ComboBoxStyle.DropDownList;
combo1.DataSource = Enum.GetValues(typeof(myEnumType));

من يدري كيف يمكن تحقيق نفس النتيجة, في حين, بالإضافة إلى إدخالات مطابقة كل التعداد قيمة, أنا يمكن أن يكون أيضا فارغة دخول تمثل أي اختيار ؟

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

أقدر لك مساعدتك.

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

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

المحلول 3

(يرجى الاطلاع على بلدي تعديل على السؤال حيث أوضحت أنني لا أريد أن ربط مجموعة من السلاسل).

بعد أكثر تافه التالية المسخ يبدو للعمل.combo1.SelectedItem هو من نوع كائن وسوف يكون إما DBNull أو (محاصر?) التعداد القيمة.هو هذا الرمز المستحسن ؟

combo1.DataSource = (new object[] { DBNull.Value }
                        .Concat(Enum.GetValues(refToAnEnumType)
                            .Cast<object>())).ToList()

تحرير: أرى آدم أندرو أساليب يمكن تكييفها بسهولة تفعل الشيء نفسه.شكرا لكم أيها الرجال!

نصائح أخرى

لست متأكدا إذا كان لديكم حاولت كل من التعليمات البرمجية التي كنت قد تم نشر أم لا, ولكن لا يمكنك إضافة عناصر تفعل databound تحرير وسرد.هذا هو winforms لا WPF, لذلك ليس هناك "DataBind" وظيفة.

هل يمكن أن تفعل هذا:

public static string[] GetEnumValues<T>(bool includeBlank) 
{
    List<string> values = new List<string>((Enum.GetValues(typeof(T)) as T[]).Select(t => t.ToString()));

    if (includeBlank)
    {
        values.Insert(0, string.Empty);
    }

    return values.ToArray();
}

ثم

combo.DataSource = GetEnumValues<myEnumType>(true);

قد تتمكن من محاولة شيء من هذا القبيل:

(تحرير تعكس Brad_Z هو اقتراح ممتاز)

static IEnumerable<String> getValues<T>(String initialValue)
{
    yield return initialValue;

    foreach (T t in Enum.GetValues(typeof(T)))
        yield return t.ToString();
}

static IEnumerable<String> getValues<T>()
{
    return getValues<T>(String.Empty);
}

هذا سوف يسمح لك لربط نتائج هذه الوظيفة مثل هذا:

combo1.DataSource = getValues<myEnumType>().ToArray();

أو مثل هذا ، إذا كنت ترغب في تحديد قيمة مختلفة الأولية البند:

combo1.DataSource = getValues<myEnumType>("Select").ToArray();
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top