2015-01-16 36 views
1

下面是一个基本的例子来解释我关心的是什么。我有一个从SQL Server获取数据的列表视图,并具有循环遍历每行数据的OnItemDataBound事件。在C#中,每行调用事件函数ListView1_ItemDataBound,因为当我在事件函数ListView1_ItemDataBound中放置一个断点时,它每行破坏一次。由于用C#编写的代码是在服务器中执行的(不确定我是否正确),这是否意味着用户需要连接到我的服务器10次(10个连接请求),如果有10行列表视图检索从数据库?如果是,这是否会影响服务器的性能?避免使用OnItemDataBound是否好?Asp.net OnItemDataBound函数影响性能?

ASPX

<asp:Listview ID="ListviewContent" runat="server" DataKeyNames="UniqueNo" DataSourceID="SqlDataSource1" OnItemDataBound="ListView1_ItemDataBound"> 
    <ItemTemplate> 
     <asp:Button id="btn_popup" text="Popup" runat="server" Visible="false" /> .................. 

C#

protected void ListView1_ItemDataBound(object sender, ListViewItemEventArgs e){...Find the button control and on certain condition make it visible or whatever you need...} 

回答

1

下面是这表明ItemDataBound事件的多次调用不匹配浏览器调用的例子。

这里的ASPX:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Test.aspx.cs" Inherits="WebApplication2.Test" %> 

<!DOCTYPE html> 

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <title></title> 
</head> 
<body> 
    <form id="form1" runat="server"> 
     <div> 
      <asp:ListView ID="lvTest" runat="server" OnItemDataBound="lvTest_ItemDataBound" OnDataBinding="lvTest_DataBinding" OnDataBound="lvTest_DataBound"> 
       <ItemTemplate> 
        <asp:Label ID="lblName" runat="server" Text='<%# Eval("Name") %>'></asp:Label> 
       </ItemTemplate> 
      </asp:ListView> 
      <img src="http://blaugh.lockergnome.com/cartoons/070126_web_developer.gif" /> 
     </div> 
    </form> 
</body> 
</html> 

这里的代码背后:

using System; 
using System.Collections.Generic; 
using System.Data; 
using System.Diagnostics; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 

namespace WebApplication2 
{ 
    public partial class Test : System.Web.UI.Page 
    { 
     DataTable dt; 

     protected void Page_Load(object sender, EventArgs e) 
     { 
      Debug.WriteLine("Page_Load"); 
      dt = new DataTable(); 
      dt.Clear(); 
      dt.Columns.Add("Name"); 

      DataRow mark = dt.NewRow(); 
      mark["Name"] = "Mark"; 
      dt.Rows.Add(mark); 

      DataRow bill = dt.NewRow(); 
      bill["Name"] = "Bill"; 
      dt.Rows.Add(bill); 

      lvTest.DataSource = dt; 
      lvTest.DataBind(); 
     } 

     protected void lvTest_ItemDataBound(object sender, ListViewItemEventArgs e) 
     { 
      Debug.WriteLine("ItemDataBound"); 
     } 

     protected void lvTest_DataBinding(object sender, EventArgs e) 
     { 
      Debug.WriteLine("DataBinding"); 
     } 

     protected void lvTest_DataBound(object sender, EventArgs e) 
     { 
      Debug.WriteLine("DataBound"); 
     } 
    } 
} 

而这里的IE剖析工具,它表明,只有两个请求都被执行,一个ASPX,一个用于图像。不是三个(两个的ItemDataBound和一个用于图像。

enter image description here

我不是100%肯定,但我认为,在引擎盖下ASP.NET调用的ItemDataBound同时建立一个ListView实例/ HTML,不正如你在从DataSource获取数据时所想的那样,为了确保你没有多个呼叫,你可以使用上面提到的IE工具

+0

谢谢你的帮助,它使得它更加清晰明白,对不起后面的回复 – SpiderWeb

+0

别客气 :)。没问题。 – Landeeyo