【问题标题】:can't cast sqlViewResults to DataRowView无法将 sqlViewResults 转换为 DataRowView
【发布时间】:2019-02-02 11:07:28
【问题描述】:

我正在处理一个 asp.net 页面并试图改善它的加载时间。在一个列表视图中加载 20 条记录大约需要 8 秒。

尽管使用 eval 很慢,但页面加载正常,如下所示:

<asp:LinkButton CommandArgument='<%#Eval("EmployeeID")%>' >Edit</asp:LinkButton>

但是,由于之前的方法比较慢,所以我根据我阅读的here的信息将其更改为以下:

<asp:LinkButton CommandArgument='<%# ((DataRowView)Container.DataItem)["ApplicationID"]%>'>Edit</asp:LinkButton>

但是新代码会产生以下错误:无法将 DataObjects.Data.EmployeeInfo 类型的对象转换为类型 'System.Data.DataRowView

现在,我对第二种方法不是很熟悉,但是第一种方法的加载时间是不可接受的。 注意事项:

  • 有一个名为 EmployeeInfo 的类
  • 正在通过存储过程从 sqlServer 检索数据
  • 存储过程从视图中获取数据
  • 有一个列表视图,其数据源设置为返回 EmployeeInfo 列表的方法的结果:列表
  • 设置数据源后调用listview.databind()
  • 当我从 eval 更改为上述方法时,每条记录中有 10 个字段都给出相同的错误
  • 调用 databind() 后程序崩溃,表明存在强制转换问题

我看到的示例代码使用了 DataRowView 和 DataItem。我应该将 DataRowView 或 DataItem 更改为其他内容吗? 我需要做什么来纠正这个错误?

【问题讨论】:

    标签: c# asp.net listview data-binding webforms


    【解决方案1】:

    更改&lt;asp:LinkButton CommandArgument='&lt;%# ((DataRowView)Container.DataItem)["ApplicationID"]%&gt;'&gt;Edit&lt;/asp:LinkButton&gt;

    &lt;asp:LinkButton CommandArgument='&lt;%# ((DataObjects.Data.EmployeeInfo)Container.DataItem).ApplicationID %&gt;'&gt;Edit&lt;/asp:LinkButton&gt;

    不过,这不太可能显着改善您的加载时间。 8 秒加载 20 条记录几乎肯定与 Eval 或 cast 无关。这可能表明您的存储过程/数据库代码存在性能问题。您应该运行 SQL Server Profiler 以准确了解数据库查询所用的时间。如果确认问题出在您的存储过程/视图上,那么您可以使用SSMS Query Analyzer 来识别瓶颈以及您可以采取哪些措施来提高性能。如果您想发布查询分析器结果,我们可以进一步帮助您。

    【讨论】:

    • 谢谢,我现在正要尝试。性能问题肯定来自用户界面,而不是存储过程。我对其进行了测试,不到一秒钟就从数据库中加载了数据。那么问题就与网页的渲染有关。
    • 这太奇怪了。它是一个包含很多元素的大页面吗?数据绑定中是否有任何自定义逻辑?
    • 没有 Mehdi,没有自定义逻辑。我不认为它有那么大的一页。它有两个列表视图(父视图和子视图)。每个列表视图有大约 10 个字段。我试过你说的。这次我收到一条错误消息,说 EmployeeInfo 不是可以索引的字段。
    • 索引器?我的答案中没有任何索引属性。你确定你用过 ((DataObjects.Data.EmployeeInfo)Container.DataItem).ApplicationID 吗?
    • 你说得对,Mehdi,我在编写现在可以运行的代码行时犯了一个错误,但性能并没有提高。你知道如果数据返回速度很快,为什么页面渲染需要这么长时间吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多