2009-02-05 5 views
1

내 마음이 오늘 작동하지 않거나 이것이 실제로 있어야한다고 생각하는 것보다 실제로 힘든 지 모르겠다.바운드 DataGridViewComboBoxCell에서 기본 객체에 대한 참조를 얻으려면 어떻게해야합니까?

DataGridView에 CustomObjects의 제네릭 IList에 바인딩 된 DataGridViewComboBoxColumn이 있습니다. 다음은 열을 설정하는 방법에 대한 대략적인 코드 샘플입니다. 나는 셀의 값을 반환 할 때

DataGridViewComboBoxColumn location = new DataGridViewComboBoxColumn() 
{ 
    Name = "Location", 
    DataSource = new BindingSource(GetMyLocations(), null), 
    DisplayMember = "Name", 
    ValueMember = "ID" 
}; 

그럼 : 나는 ID 속성에 대한 참조를하지 않을

string id = (string)row.Cells["Location"].Value; 

하지만를, 내가 실제 위치 개체에 대한 참조를 원한다! ValueMember를 지정하지 않으려 고 시도했지만 DisplayMember를 사용하는 것으로 보입니다.

데이터 원본 열의 모든 위치 개체를 반복하고 일치하는 ID 속성을 확인했지만 ComboBoxCell에서 직접 반환 할 수 있어야합니다.

또한이 경우 사전을 사용할 수 없습니다.

가장 좋은 방법은 무엇입니까?

답변

1

"이름"의 KeyValuePairIList과 사용자 지정 개체를 사용할 수 있습니다. 아이디어는 ValueMember 객체의 참조를 가리 키기 위해 필요합니다. ComboBox 님과 함께 잠시 동안 비슷한 문제가 있었던 것을 기억합니다. 다음과 같은

뭔가 (내 머리의 상단과 테스트되지 않은 오프) 트릭을 할 에게서는 :

IList<KeyValuePair<String,MyObject>> comboData = 
    new IList<KeyValuePair<String,MyObject>>(); 

foreach(var o in GetMyLocations()) 
    comboData.Add(new KeyValuePair<String,MyObject>(o.Name, o)); 

DataGridViewComboBoxColumn location = new DataGridViewComboBoxColumn() 
{ 
    Name = "Location", 
    DataSource = comboData, 
    DisplayMember = "Key", 
    ValueMember = "Value" 
}; 

당신이 채우기하지 않는, 그래서 당신은 대신 KeyValuePair 목록을 반환 GetMyLocations()을 변경할 수 있습니다 아무 이유없이 두 목록.

0
public class Thing 
{ 
    public string id{ get ; set ; } 
    public string Name { get ; set ; } 

    //self ref 
    public Thing This 
    { 
     get { return this; } 
    } 
} 



form_load(){ 
     comboboxcell.ValueMember = "This"; // self ref 
     comboboxcell.DisplayMember = "Name"; 
} 


datagridview1.CellValueChanged += (s, e) => { 
    var cb = (DataGridViewComboBoxCell)dgv_titles.Rows[e.RowIndex].Cells[e.ColumnIndex]; 
    var selectedObject = (Thing)cb.Value ; 
} 

thats easieset 및 가장 깨끗한 방법.

http://mikehadlow.blogspot.com/2006/09/problems-with-datagridviewcomboboxcolu.html

관련 문제