Combobox는 "공백"항목을 갖는 동안 열거 유형의 값에 묶여 있습니까?
문제
winforms combobox를 열거 유형의 값에 바인딩하면, 즉
combo1.DropDownStyle = ComboBoxStyle.DropDownList;
combo1.DataSource = Enum.GetValues(typeof(myEnumType));
내가 동일한 결과를 얻을 수있는 방법을 누가 알 수 있지만, 각 열거 값과 일치하는 항목 외에도 선택이없는 빈 항목을 가질 수 있습니까?
열거 유형에 특수 값을 추가 할 수는 없습니다.
도움을 주셔서 감사합니다.
편집하다: 나는 그들의 이름이 아니라 실제 열거 값을 바인딩하고 싶다는 것을 분명히해야합니다. 실제 열거 값이 바인딩되면 Combobox는 텍스트를 표시하기 위해 ToString ()을 호출합니다.
해결책 3
(문자열 모음에 묶고 싶지 않다는 것을 명확히하는 질문에 대한 편집을 참조하십시오).
더 많은 충격을받은 후에는 다음과 같은 괴물이 효과가있는 것 같습니다. combo1.selectedItem은 유형 객체이며 dbnull 또는 (Boxed?) 열거 값이 될 것입니다. 이 코드가 권장됩니까?
combo1.DataSource = (new object[] { DBNull.Value }
.Concat(Enum.GetValues(refToAnEnumType)
.Cast<object>())).ToList()
편집하다: 나는 Adam과 Andrew의 방법이 같은 일을하기 위해 쉽게 적응할 수 있습니다. 감사합니다!
다른 팁
당신이 게시 한 모든 코드를 시도했는지 확실하지 않지만 항목을 추가 할 수는 없습니다. 이것은 WPF가 아닌 Winforms이므로 "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();