我有一个ASPX页面定义了GridView控件(通过DataSourceID)通过实体类绑定到sql数据库。编辑行后,数据已正确更新,但编辑的行中的某些列现在为空。非空的列显示更新的数据,实际上数据在数据库中更新。此外,即使在更新的行中显示为空的列也会在数据库中正确更新。非空列显示更新数据的事实也证明GridView在行更新后执行数据绑定。为什么更新行中的某些列显示为空是超出我的...
更重要的是,如果我编辑另一行,新编辑的行现在显示与空相同的列,以前编辑的行显示为空。然后,先前编辑的行现在显示所有列。
编辑: 我刚刚发现只有在数据源上将 deferredloadingenabled 设置为true时才会出现此问题。对于那些不属于数据源中的实体表的列,会发生这种情况。我可以通过创建一个视图来解决这个问题,但这样做效率很低。这意味着我需要为每个gridview创建一个视图。
答案 0 :(得分:0)
此处的问题是,在更新之后,更新行的其他实体的链接为NULL。您可以做的是使用与其他实体的链接对应的ID并进行按需查找。
也就是说,也许你的定义类似于<%#Eval(“Customer.FirstName”)%>,在更新之后,该行可能为空,因为属性“Customer”是客户实体的链接获取名字,为null。所以只需定义如下:
<%# Eval("Customer.FirstName") ?? Customer.GetFirstNameByID(Eval("CustomerID")) %>
您可以在Customer实体类中定义函数GetFirstNameByID以返回客户名。现在更新后,如果“Customer”属性为null,则第一个Eval()将返回null,因此第二个语句将执行。 Eval(“CustomerID”)将起作用,因为属性“CustomerID”是当前实体的一部分。然后返回适当的属性,列不显示为空。