是它當然可以改寫在ASP.NET中 - 注意,我說重寫,而不僅僅是重構,沒有保存該代碼(這是沒有關係,但事情與ASP.NET不同)。
說實話,我沒有檢查代碼,它傷害了我的眼睛。很多。但通常情況下,您可以使用一個很好的SQLConnection對象和一個SQLCommand,調用一個存儲過程並獲取一個很好的SqlDataReader,其中包含可以構建DataTable或IEnumerable數據對象列表的數據。然後,在UI中有一箇中繼器類型控件(ListView,GridView等),只需將您的數據表或列表綁定到該控件將呈現結果。
使用ListView,可以爲每個渲染的數據項指定一個模板。對於GridView,您可以指定列(或列模板)以及列應綁定到的每個數據項上的哪些屬性。
當您檢索數據時,可以將其保留爲DataTable,或將其轉換爲其他類似數據對象的列表(或數組)的東西。只要你的列表/數組實現IEnumerable,你應該能夠將列表分配給上述中繼器控件的ItemsSource屬性,並且它將執行它的魔法。
您甚至不必使用SQLCommand和DataTable對象 - 甚至可以使用Linq to SQL並將結果直接綁定到中繼器控件。
這只是您如何做到這一點的高層次概述,有幾種不同的方法。一旦完成,您的代碼將比傳統的ASP代碼更清潔,更易維護。
編輯:您的主要問題是如何生成一個有序列表,這是當前代碼正在爲它的嵌套循環提供詳細項目的ID。
我建議你退後一步,重新思考sql。事實上,拋開當前的sql,對於今天的工具來說,這是非常低效的。它需要幾乎十分之一秒的時間,並且只需要一次數據庫調用即可返回一個平坦的數據表。你的第一本能可能是「但我不想回報太多的數據!」 - 放鬆,即使返回幾千個數據行,如果正確完成,也可以是1秒以內的操作。您還可以通過將參數傳遞給存儲過程來限制返回的數據,或者將它們附加到您構建的動態sql語句中(儘管提及動態SQL讓我非常痛苦,但我認爲它很邪惡,但有些人仍然使用它 - 我不會推薦它,除非它是你唯一的選擇)。總結我在說什麼,你的數據是如何從數據庫中返回的以及它在屏幕上的顯示方式是兩回事,不要一個人指導另一個。您可以從數據庫獲取數據,然後在將其呈現到UI之前對其進行處理。
如果您仍想將數據顯示爲有序列表,然後使用ListView,爲每個數據項定義一個模板,那麼您可以使用LINQ對您喜歡的數據進行分組或過濾(數據項模板可以包含無論您喜歡哪種HTML或ASP.NET控件,並且該模板都會針對數據列表中的每個數據項呈現)。或者,您可以使用GridView,然後使用GridView的分組功能爲您完成工作 - 只需指定要分組的列,並由GridView負責渲染。
放心,我見過遠遠更糟的經典asp代碼;-) – fretje 2010-06-17 10:24:10