首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法更改DataGridViewComboBox值

无法更改DataGridViewComboBox值
EN

Stack Overflow用户
提问于 2012-11-23 18:24:30
回答 1查看 569关注 0票数 1

我有一个从LINQ查询中填充的DataGridView。其中一列是FK,因此我添加了一个ComboBox列来显示此字段,它显示得很好。

我遇到的问题是,它不允许我更改ComboBox的值,因为它的行为就像它被锁定一样。我已经检查了DGV和列的ReadOnly属性,两者都是false。

有没有人能解释一下我错过了什么?

填充DGV的代码如下:

代码语言:javascript
复制
    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();
    }

非常感谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-11-23 22:55:12

我相信这是因为你在使用匿名类型。在您的示例中,您可以使用原始类型( evt和sts的类型)

代码语言:javascript
复制
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对象作为视图模型

代码语言:javascript
复制
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变得更容易。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13527116

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档