2012-11-23 10 views
1

LINQ 쿼리에서 채우는 DataGridView가 있습니다. 열 중 하나는 FK이므로 ComboBox 열을 추가하여이 필드를 표시하면 정상적으로 표시됩니다.DataGridViewComboBox 값을 변경할 수 없습니다.

내가 겪고있는 문제는 잠긴 것처럼 동작하므로 ComboBox의 값을 변경하지 못하게하는 것입니다. DGV와 Column 모두의 ReadOnly 속성을 확인했으며 둘 다 false였습니다.

내가 누락 된 부분에 대해 알려줄 수 있습니까?

private void PopulateForm() 
    { 
     DBDataContext db = new DBDataContext(); 

     var eventTypes = 
      from evt in db.EVENT_TYPEs 
       .Where(a => a.Omit == false) 
       .OrderBy(a => a.EventType) 
      select new 
      { 
       EventTypeID = evt.EventTypeID, 
       EventType = evt.EventType, 
       UpdateToStatusID = evt.UpdateToStatusID, 
       AttachmentAllowedYn = evt.AttachmentAllowedYn, 
       AttachmentRequiredYn = evt.AttachmentRequiredYn, 
       CommentRequiredYn = evt.CommentRequiredYn 
      }; 

     var statuses = 
      from sts in db.STATUS 
       .Where(a => a.Omit == false) 
      select new 
      { 
       StatusID = sts.StatusID, 
       Status = sts.TechreqStatus 
      }; 

     DataGridView dgv = this.dgvEventTypes; 
     DataGridViewColumn col; 

     dgv.AutoGenerateColumns = false; 
     col = dgv.Columns[dgv.Columns.Add("EventTypeID", "EventTypeID")]; 
     col.DataPropertyName = "EventTypeID"; 

     col = dgv.Columns[dgv.Columns.Add("EventType", "Event Type")]; 
     col.DataPropertyName = "EventType"; 

     DataGridViewComboBoxColumn comboCol = new DataGridViewComboBoxColumn(); 
     comboCol.Name = "UpdateToStatusID"; 
     comboCol.HeaderText = "Update To Status"; 
     comboCol.DataPropertyName = "UpdateToStatusID"; 
     comboCol.DataSource = statuses; 
     comboCol.ValueMember = "StatusID"; 
     comboCol.DisplayMember = "Status"; 
     dgv.Columns.Add(comboCol); 

     col = dgv.Columns[dgv.Columns.Add("AttachmentAllowedYn", "Attachments Allowed Yn")]; 
     col.DataPropertyName = "AttachmentAllowedYn"; 

     col = dgv.Columns[dgv.Columns.Add("AttachmentRequiredYn", "Attachment Required Yn")]; 
     col.DataPropertyName = "AttachmentRequiredYn"; 

     col = dgv.Columns[dgv.Columns.Add("CommentRequiredYn", "Comment Required Yn")]; 
     col.DataPropertyName = "CommentRequiredYn"; 

     dgv.DataSource = eventTypes; 

     db.Dispose(); 
    } 

많은 감사

답변

5

난 당신이 익명 형식을 사용하고 있기 때문에 그것이 생각을 다음과 같이

DGV를 채울 수있는 코드입니다. 귀하의 경우에는 , 당신은 원래의 유형 (유형 EVT의 및 STS)를 사용할 수

var eventTypes = from evt in db.EVENT_TYPEs where !evt.Omit order by evt.EventType 
       select evt 

var statuses = from sts in db.STATUS where !sts.Omit 
       select sts 

또는

뷰 모델

var eventTypes = from evt in db.EVENT_TYPEs where !evt.Omit order by evt.EventType 
       select new EventTypesObject() {EventTypeID = evt.EventTypeID, ...} 

var statuses = from sts in db.STATUS where !sts.Omit 
       select new StatusObject() {StatusID = sts.StatusID, Status = sts.TechreqStatus} 
역할을하는 POCO 객체를 생성

이렇게하면 양방향 바인딩이 필요할 경우 INotifyPropertyChanging 및 INotifyPropertyChanged를 쉽게 구현할 수 있습니다.

+0

완벽합니다. 정확히 내가 빠진 것이고 이것이 내 문제를 해결했습니다. 많은 감사합니다! – CrazyHorse

관련 문제