2010-05-18 2 views
2

"채울 수있는 콤보 상자"가 있는데 더 많은 콤보 상자를 사용하기 시작했습니다. 그것은 콤보 박스 객체를 "값 세트"의 ID (또는 당신이 그것을 호출하기를 원하는 것)의 ID와 함께 테이블로부터 가져 와서 항목들과 각각의 값들 (차이점)을 추가하고 그 일을합니다.ComboBoxDataColumn 항목 및 값 채우기

나는 최근에 gridview에서 콤보 박스를 사용하는 훌륭한 아이디어를 가지고 있었고, 단 하나의 콤보 박스와 마찬가지로 작동했지만 동시에 주어진 컬럼의 모든 콤보 박스를 채우는 것을 보았습니다.

ObjComboBox.Items.Add("yadayada"); 
//works just like 
ObjComboBoxColumn.Items.Add("blablabla"); 

하지만 내가 발견 한이 콤보 상자를 채우는 방법을 계획하기 시작했을 때 : ComboBoxDataColumn에는 "값"속성이 없습니다.

ObjComboBox.Values = whateverArray; 
//works, but the following doesn't 
ObjComboBoxColumn.Values = whateverArray; 

질문 :
0 - 어떻게하면 값의 채울 수 있습니까? (나는 그것이 단순한 것 같지만 다른 이름을 사용한다)
1 - 콤보 박스처럼 작동한다면,이 속성을 가지고 있지 않다는 것에 대한 설명은 무엇인가?


----- [편집] ------

그래서 찰스 '견적을 체크 아웃 한, 그리고 내가이 나쁜 채우는 내 방식을 변경했다 냈어요 소년들. 문자열을 반복하고 콤보 상자에 하나씩 삽입하는 대신 테이블에 채울 필드를 잡아서 "값"으로 테이블의 한 열을 설정하고 "표시"로 다른 필드를 설정해야합니다. . 그래서 내가이 짓을했는지 :

ObjComboBoxColumn.DataSource = DTConfig; //Double checked, guaranteed to be populated 

ObjComboBoxColumn.ValueMember = "Code"; 
ObjComboBoxColumn.DisplayMember = "Description"; 

을하지만 아무는 발생하지 그래서 같은 개체를 사용하는 경우 :

ObjComboBoxColumn.Items.Add ("에 StackOverflow");

추가됩니다.

DataBind() 함수가 없습니다.

두 개의 열을 찾았습니다.이 열은 "코드"및 "설명"을 보장하며 이름을 존재하지 않는 이름으로 변경하면 예외가 발생하므로 좋은 신호입니다. |


----- [편집] ------

나는

과 같은 코드가 SQL 서버에서 테이블이 텍스트
-----
1 | foo
2 | 바

그것은 간단하고, 다른 콤보와 내가 성공적으로 행을 반복하고 텍스트를 추가 채워했습니다 (있는 GridViews의 외부) : 배열에 추가해,

ObjComboBox.Items.Add(MyDataTable.Rows[I]["MyColumnName"].ToString()); 

그리고 모든 값을 얻는 및 이 같은 설정 :

ObjComboBox.Values = MyArray; 

난 그냥 단순히 내가 콤보와 마찬가지로 내 comboboxColumns을 채우는 싶습니다.

답변

3

나는 불쾌한 말을하는 것이 아니라 모든 내용에 대한 문서가 있다는 것을 알고 있습니까? http://msdn.microsoft.com/en-us/library/system.windows.forms.datagridviewcomboboxcolumn.aspx에서

:

당신은 항목 컬렉션에 값을 추가하여 수동으로 열 드롭 다운 목록을 채울 수 있습니다. 또는 DataSource 속성을 설정하여 데이터 소스에 드롭 다운 목록을 바인딩 할 수 있습니다. 값이 개체가 컬렉션에 있거나 데이터베이스 테이블에 레코드 인 경우 DisplayMember 및 ValueMember 속성도 설정해야합니다. DisplayMember 속성 은 데이터베이스 입력란에 값이 어떤 개체 속성 또는 목록에 표시되는지 나타냅니다. ValueMember 속성 은 셀 값 속성을 설정하는 데 사용되는 개체 속성 또는 데이터베이스 열을 나타냅니다.


편집 : 당신이 DisplayMember 및/또는 ValueMember에 대한 기본 유형의 비공개 속성을 사용하려고 시도 할 수처럼 편집에서

, 그것은 소리. 또는 콤보 상자 데이터 소스가 DataTable 인 경우 "코드"와 "설명"열이 있는지 확인하십시오.

다음은 간단한 데모입니다. 나는 Foo의리스트를 만들고 그것을 나의 콤보 박스 컬럼의 DataSource로 할당한다. 그냥 윈폼 응용 프로그램을 작성하고이 붙여 넣습니다.

public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 
    }     

    protected override void OnLoad(EventArgs e) 
    { 
     base.OnLoad(e); 

     // this will be the datasource for the combo box column; you could also bind it to a dataset 
     List<Foo> foos = new List<Foo>() { 
      new Foo() { FooID = 0, FooName = "No Foo." }, 
      new Foo() { FooID = 1, FooName = "Foo Me Once" }, 
      new Foo() { FooID = 2, FooName = "Foo Me Twice" }, 
      new Foo() { FooID = 3, FooName = "Pity The Foo!" } 
     }; 

     DataGridView dataGridView1 = new DataGridView(); 
     dataGridView1.AutoGenerateColumns = false; 

     // add normal text column 
     DataGridViewColumn column = new DataGridViewTextBoxColumn(); 
     column.DataPropertyName = "MyText"; 
     column.Name = "Text"; 
     dataGridView1.Columns.Add(column); 

     // add the combo box column 
     DataGridViewComboBoxColumn comboCol = new DataGridViewComboBoxColumn(); 
     comboCol.Name = "Foo"; 
     // bind it to the list of foos to populate it 
     comboCol.DataSource = foos; 
     // specify which property of the grid's datasource to bind 
     comboCol.DataPropertyName = "MyFoo"; 
     // specify the property of the combo's datasource to bind 
     comboCol.ValueMember = "FooID"; 
     // specify the property of the combo's datasource to display 
     comboCol.DisplayMember = "FooName"; 

     dataGridView1.Columns.Add(comboCol); 

     // add some data 
     BindingSource bindingSource1 = new BindingSource(); 
     bindingSource1.Add(new BusinessObject(1, "You say")); 
     bindingSource1.Add(new BusinessObject(2, "George says")); 
     bindingSource1.Add(new BusinessObject(3, "Mr. T says")); 
     bindingSource1.Add(new BusinessObject()); 
     dataGridView1.DataSource = bindingSource1; 

     Controls.Add(dataGridView1); 
     dataGridView1.Dock = DockStyle.Fill; 
    }   

    class Foo 
    { 
     public int FooID { get; set; } 
     public string FooName { get; set; }   
    } 

    class BusinessObject 
    { 
     public BusinessObject(int foo, string text) 
     { 
      MyFoo = foo; 
      MyText = text; 
     } 
     public BusinessObject() 
     { 
      MyFoo = 0; 
      MyText = ""; 
     }    
     public string MyText { get; set; } 
     public int MyFoo { get; set; } 
    } 
} 
+0

당신은 불쾌한 소리를하지 않는 all.Everyone뿐만 아니라 C#을 심하게 문서화로 .NET 프레임 워크를 알고에, 나는 은혜를 모르는 소리하지 않지만, 나는 C#에 관한 8 만 1000 가지 질문 중 약 6 만 건이 문서를 읽거나 이해하지 못했거나 잘못 해석했거나 전혀 읽지 않은 사람들로부터 나온 것이라고 생각합니다. 나는 이것들에 중점을두고 있지만 그것에 대해 읽었는데 쉽게 할 수있는 방법을 찾지 못했고 S.O. 그리고 그것에 대해 아무런 질문을 찾지 못했다면, 나는 그것에 대해 질문을하기로 결심했습니다, 그리고 아마도 다른 사람들이 미래에 찾을 수 있지만 감사합니다! – Marcelo

+0

@MarceloRamires : 아마도 맞을 것입니다. 제가 인용 한 문서가 도움이됩니까? 해당 페이지에도 몇 가지 예가 있습니다. 당신이 아직도 혼란 스럽다면 나는 당신을 위해 간단한 예제를 채찍질 할 수 있습니다. –

+0

나는 기쁘다 =) 내 질문을 업데이트했습니다 – Marcelo

관련 문제