gpt4 book ai didi

c# - 无法更改 DataGridViewComboBox 值

转载 作者:太空宇宙 更新时间:2023-11-03 20:21:04 24 4
gpt4 key购买 nike

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

我遇到的问题是它不会让我更改 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 对象作为 View 模型

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}

如果需要双向绑定(bind),这将使实现 INotifyPropertyChanging 和 INotifyPropertyChanged 变得更加容易。

关于c# - 无法更改 DataGridViewComboBox 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13527116/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com