gpt4 book ai didi

c# - 在datagridview中编辑文本框

转载 作者:行者123 更新时间:2023-12-04 10:46:30 26 4
gpt4 key购买 nike

我的项目是带有 Entity Framework 的 c# windows 窗体,并且我有带有 TextColumn 的 DataGridView。我想编辑最后一列 TextColumn Cells[3]。
将所有值从数据库获取到 GridView 是没有问题的。我明白了。
而且我可以输入一个新值,但只要我点击 ontherplace,它就会更改为旧值。文本框没有保留我要编辑的新值。
对于第 3 列中的此单元格,ReadOnly 为 false,因为我可以写入但将新值更改回旧值。
我错过了什么样的事件,我该如何解决这个问题?从某些方面来说,Gridview 的洞似乎被锁定了。请帮忙。

我什至尝试过:

foreach (DataGridViewRow row in dgvOrder.Rows)
{
row.Cells[3].ReadOnly = false;
}

下面是我的代码。
private void Treatments_Load(object sender, EventArgs e)
{
try
{
using (MyHealthEntities db = new MyHealthEntities())
{
var orderd = db.Order.Where(x => x.Ordernr == OrNr).FirstOrDefault();
if(orderd != null)
{
var myOrder = (from u in db.....
join d in ...
join m in ...
where u.....
select new
{
OrderId = m.MedId,
Name = m. Name,
Quality = m.Quality,
Description = d.Description

}
).ToList();
if (myOrder != null)
{


dgvOrder.DataSource = myOrder ;
}
}
foreach (DataGridViewRow row in dgvOrder.Rows)
{
row.Cells[3].ReadOnly = false;
}

}

}
catch (Exception ex)
{
MessageBox.Show(ex.Message);

}

}

}

最佳答案

如果我没记错的话,直接绑定(bind)到的普通 System.Collections.Generic.List 将不支持编辑,因为它没有实现双向数据绑定(bind)的 IBindingList(或必要的 ListChanged 事件)。您可能需要将 List 包装到 BindingList 中才能编辑值。这对于匿名类型是不可能的。

首先,创建一个类来存储您的列表项:

public Class Order {
public int OrderID { get; set; }
public string Name { get; set; }
public byte Quality { get; set; }
public string Description { get; set; }
}

然后在您的查询中,
select new Order
{
OrderId = m.MedId,
Name = m. Name,
Quality = m.Quality,
Description = d.Description
}

现在将其移动到 BindingList:
if (myOrder != null) {
BindingList<Order> myBindingList = New BindingList<Order>(myOrder);
dgvOrder.DataSource = myBindingList;
}

我还建议将 BindingList 包装在 BindingSource 中,这样您就不必手动处理添加/删除的行:
if (myOrder != null) {
BindingList<Order> myBindingList = New BindingList<Order>(myOrder);
BindingSource myBindingSource = New BindingSource(myBindingList);
dgvOrder.DataSource = myBindingSource;
}

抱歉,如果我的语法有点不对劲,我最近大部分时间都在使用 vb。

编辑:我错过了 BindingList 没有实现 IContainer,因此上面用于绑定(bind)到 BindingSource 的代码将不起作用,因为 BindingSource 的单参数构造函数专门采用 IContainer。 如果您仍想使用 BindingSource,则应使用 BindingSource 的第三个构造函数,如下所示:
BindingSource myBindingSource = New BindingSource(myBindingList, Nothing);

BindingSource 接受绑定(bind)到 IBindingList,但只能使用此构造函数或在使用无参数构造函数后直接设置 .DataSource 属性。
保留上面的错误代码,以便阅读 OP 评论的其他人了解所引用的内容。

关于c# - 在datagridview中编辑文本框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59681713/

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