2015-01-16 34 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