2013-06-30 64 views
0

我有一个ASPX页面,它通过一个实体类与一个GridView控件绑定(通过DataSourceID)绑定到一个sql数据库。在编辑一行后,数据被正确更新,但编辑行中的一些列现在为空。非空的列显示更新的数据,并且数据实际上在数据库中更新。此外,即使在更新的行中显示为空的列也在数据库中正确更新。非空的列显示更新数据的事实也证明了GridView在行更新后执行了一个数据绑定。为什么更新行中的某些列显示空白超出了我的范围......更新后更新后的gridview行中的某些列为空

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

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

+1

你只是说这将是低效率的,因为你想懒惰,* * * *为每个* gridview *做一个视图?还是有真正的证据表明它实际上效率不高? – Zack

回答

0

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

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

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

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