문제

현재 클래스가 있고 이 클래스의 컬렉션을 만들기 위해 쉬운 GUI를 만들려고 합니다.이 클래스의 속성 대부분은 문자열입니다.그러나 사용자가 설정할 수 있기를 원하는 속성 중 하나는 Enum입니다.따라서 사용자 인터페이스에 이 열거형에 대한 드롭다운 목록이 있어서 사용자가 유효하지 않은 값을 입력하지 못하도록 제한하고 싶습니다.현재 저는 개체의 초기 목록을 가져와 DataTable에 추가하고 DataGridView의 DataSource를 테이블에 설정하고 있습니다.훌륭하게 작동하며 하나의 부울 속성에 대한 확인란 열을 생성하기도 합니다.하지만 열거형 열을 드롭다운 목록으로 만드는 방법을 모르겠습니다.저는 C#과 .NET 2.0을 사용하고 있습니다.

또한 DataGridView의 DataSource를 내 개체 목록에 할당하려고 시도했지만 이렇게 하면 열거형에 도움이 되지 않고 DataGridView에서 새 행을 만들 수 없습니다. 그러나 확실히 그렇지 않습니다. DataTable을 내 DataSource로 사용하는 것은 단순히 반쯤 작동하는 옵션이었습니다.

도움이 되었습니까?

해결책

DataGridView 열에서는 작동할지 모르겠지만 ComboBox에서는 작동합니다.

comboBox1.DataSource = Enum.GetValues(typeof(MyEnum));

그리고:

MyEnum value = (MyEnum)comboBox1.SelectedValue;

업데이트:DataGridView 열에서도 작동하므로 값 유형을 설정하는 것을 기억하세요.

DataGridViewComboBoxColumn col = new DataGridViewComboBoxColumn();
col.Name = "My Enum Column";
col.DataSource = Enum.GetValues(typeof(MyEnum));
col.ValueType = typeof(MyEnum);
dataGridView1.Columns.Add(col);

다른 팁

또는 열거자 값을 필터링해야 하는 경우 다음을 반복할 수 있습니다. Enum.GetValues(typeof(EnumeratorName)) 다음을 사용하여 원하는 것을 추가하십시오.

dataGridViewComboBoxColumn.Items.Add(EnumeratorValue)

여담으로, DataTable을 사용하는 대신 DataGridView의 DataSource를 BindingSource 개체로 설정하고 BindingSource 개체의 DataSource를 BindingList<Your Class>, 전달하여 채웁니다. IList 생성자에.

실제로 아직 DataTable이 없는 상황에서 DataTable을 사용하는 것보다 이것이 더 나은지 누구에게나 알고 싶습니다.데이터베이스 호출에서 반환됩니다.)

    if(e.KeyCode == Keys.Oem3)
    {

    }

이것은 나를 위해 일했습니다

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top