2012-11-30 76 views
2

我想要做什麼:實現gridview行點擊事件的有效方法?

我想實現一個gridview,用戶可以選擇的行和選定行內有從細胞中的文字出現在頁面上的多個文本框進行編輯。我還想根據所選行中的文本更新圖像。

如何我做現在:

目前,我使用自定義點擊GridView控件發現here。本質上,自定義控件在單擊該行的任何位置時會導致回發,並提供一個可以附加事件處理函數的「OnRowClicked」事件。在這個函數中,我保存的rowIndex的視圖狀態,然後使用類似的代碼:

protected void GridViewClicked(object sender, GridViewRowClickedEventArgs e){ 
    TextBox1.Text = System.Net.WebUtility.HtmlDecode(e.Row.Cells[0].Text); 
} 

爲了填補文本框的文本和代碼,如:

string filepath = "~/Bitmaps/" + TextBox1.Text + ".bmp"; 
    if (File.Exists(Server.MapPath(filepath))) 
    { 
     bitmap.ImageUrl = filepath; 
    } 
    else 
    { 
     bitmap.ImageUrl = "~/Bitmaps/NoImage.bmp"; 
    } 

要更新的圖像(最大尺寸500KB)在我點擊的行的網頁上。

那麼問題是什麼?

那麼,一切正常,因爲它應該。但是,問題在於,每次點擊鼠標時發生的鼠標點擊與字段/圖像更新(〜0.5s)之間的時間差異很大,這非常煩人。但是,我不知道我能做些什麼來提高性能,或者即使這是代碼或託管服務的問題。因此,我所要問的是延遲是否能夠被固定,或者是否我只需要處理?或者,也許我以非常低效的方式實施了這個解決方案?任何輸入讚賞。

回答

1

這個網格是Ajax控件嗎?如果沒有,則延遲可能只是您每次點擊發回。對於每一個回帖,網格需要重新生成所有的HTML並將其發回,然後瀏覽器必須呈現它。這是很多活動!

您可以研究減少必須發送的數據量的方法,例如關閉某些控件的視圖狀態。或者,您可以查看Ajax解決方案。你必須在服務器端做的唯一的事情是檢查圖像的存在:其他的一切都可以在Javascript中完成。在性能方面,檢查文件存在的Ajax調用不會很昂貴,而且編寫起來相對簡單。

經驗法則(如果您是高級編碼人員,並且已經知道這個規則),您需要做的事情就是:需要做出更多的響應,更少的回覆和調用您想要創建的服務器,以及更少的數據你想來回發送。

+0

我在此處使用ASP.NET Ajax使用部分頁面更新:http://www.asp.net/web-forms/tutorials/aspnet-ajax/understanding-partial-page-updates-with-asp-net -ajax。將我的代碼轉換爲JavaScript仍然值得嗎? – Tony

+0

我想 - 閱讀文章(你是對的,這是一個很好的) - 轉換爲Javascript和使用靜態PageMethod檢查文件的存在可能是最好的方式。您遇到的延遲可能是重新渲染,部分刷新發生時由瀏覽器完成的重新解析以及瀏覽器爲獲取新圖像而完成的調用的組合。但是,您需要在圖像控件上進行更改的是圖像URL,您可以在javascript中執行此操作(如果您寫的PageMethod表示圖像存在)。*應該更快。 –

0

我認爲gridview行點擊正確地完成它的工作,你正在調用正確的功能。我認爲這是花費時間的File.IsFileExists函數。一切都需要回傳。我認爲這是你的文件檢查功能。也許緩存文件名或將其保存在數據庫中。也許在數據庫上建立索引。我認爲文件檢查正在循環所有文件。換句話說,Gridview的行點擊很快就沒有代碼。