【问题标题】:Some columns empty in updated gridview row after update更新后更新的gridview行中的某些列为空
【发布时间】:2013-06-30 19:31:58
【问题描述】:

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

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

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

【问题讨论】:

  • 你是说因为你想偷懒并且为每个gridview制作一个视图而效率低下吗?还是有真实的证据表明它实际上没有效率?

标签: asp.net c#-4.0


【解决方案1】:

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

也就是说,也许您的定义类似于 ,在更新之后,该行可能为空,因为属性“Customer”是要获取的客户实体的链接第一个名字,为空。所以只要这样定义:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-25
    • 1970-01-01
    • 2013-03-27
    • 1970-01-01
    • 2016-02-23
    • 1970-01-01
    相关资源
    最近更新 更多