无法将sqlViewResults转换为DataRowView

时间:2018-08-27 21:37:06

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

我正在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检索数据
  • 存储过程从视图获取数据
  • 有一个listview,其数据源设置为返回EmployeeInfo List的方法的结果:List
  • 设置数据源后,
  • listview.databind()被调用
  • 每条记录中有10个字段,当我从评估转换为上述方法时,它们都给出相同的错误
  • 调用databind()指示转换问题后程序崩溃

我看到的示例代码使用了DataRowView和DataItem。我是否应该将DataRowView或DataItem更改为其他内容? 我需要怎么做才能纠正此错误?

1 个答案:

答案 0 :(得分:1)

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

<asp:LinkButton CommandArgument='<%# ((DataObjects.Data.EmployeeInfo)Container.DataItem).ApplicationID %>'>Edit</asp:LinkButton>

尽管如此,这不太可能对您的加载时间做出任何重大改进。 8秒内加载20条记录几乎可以肯定与Eval或演员表无关。这很可能表明您的存储过程/数据库代码中存在性能问题。您应该运行SQL Server Profiler来准确了解数据库查询花费了多长时间。如果确认问题出在您的存储过程/视图中,则可以使用SSMS Query Analyzer来识别瓶颈以及可以采取哪些措施来提高性能。如果您要发布查询分析器结果,我们可以在那里进一步为您提供帮助。