无法更改DataGridViewComboBox值

问题描述:

我有一个DataGridView,我从LINQ查询填充。其中一列是FK,所以我添加了一个ComboBox列来显示这个显示正常的字段。无法更改DataGridViewComboBox值

我遇到的问题是,它不会让我改变ComboBox的值,因为它的行为就好像它被锁定一样。我检查了DGV和Column的ReadOnly属性,都是错误的。

任何人都可以阐明我所缺少的东西吗?

填充DGV的代码如下:

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(); 
    } 

非常感谢

我相信这是因为你使用的匿名类型。 在你的情况,你可以使用(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 

或者

创建POCO对象作为视图模型

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} 

如果需要双向绑定,这将更容易实现INotifyPropertyChanging和INotifyPropertyChanged。

+0

完美,这正是我所错过的,这已经解决了我的问题。非常感谢! – CrazyHorse