0

我有一个 ASPX 页面,其中定义了一个通过实体类绑定到 sql 数据库的 GridView 控件(通过 DataSourceID)。编辑行后,数据已正确更新,但已编辑行中的某些列现在为空。不为空的列显示更新的数据,数据实际上是在数据库中更新的。此外,即使在更新的行中显示为空的列,也会在数据库中正确更新。非空列显示更新数据的事实也证明了 GridView 在行更新后进行了数据绑定。为什么更新行中的某些列显示为空,这超出了我的理解...

更重要的是,如果我编辑另一行,新编辑的行现在显示为空的列与先前编辑的行显示为空的列相同。然后先前编辑的行现在显示所有列。

编辑:我刚刚发现只有当我在数据源上将deferredloadingenabled设置为 true 时才会出现此问题。对于那些不属于数据源中实体表的列,会发生这种情况。我可以通过创建视图来解决这个问题,但这确实效率低下。这意味着我需要为每个网格视图创建一个视图。

4

1 回答 1

0

这里的问题是,在更新之后,对于更新的行,指向其他实体的链接为 NULL。您可以做的是使用与其他实体的链接对应的 ID 并进行按需查找。

也就是说,也许您的定义类似于 <%# Eval("Customer.FirstName") %>,在更新后,该行可能为空,因为属性“Customer”是指向客户实体的链接以获取名字, 一片空白。所以只需定义如下:

<%# Eval("Customer.FirstName") ?? Customer.GetFirstNameByID(Eval("CustomerID")) %>

您将在 Customer 实体类中定义函数 GetFirstNameByID 以返回客户的名字。现在在更新之后,如果并且当“客户”属性为空时,第一个 Eval() 将返回空,因此将执行第二个语句。Eval("CustomerID") 将起作用,因为属性“CustomerID”是当前实体的一部分。然后返回正确的属性,并且该列不会显示为空。

于 2013-07-05T15:26:25.137 回答