若在頁面中包含了一個 GridView 及 DetailsView 控制項,當 GridView 選取某一筆時,希望在 DetailsView 中顯示那一筆的詳細資料。一般的作法會讓 GridView 及 DetailsView 會繫結各別獨立的 SqlDataSoruce,當 GridView 選取時就以主鍵去對 DetailsView 的 SqlDataSource 做篩選資料的動作。

不過本文的作法不同,讓 GirdView 與 DetailsView 繫結到同一個 SqlDataSource,而且只要撰寫很少的程式碼,就可以達到 GridView 與 DetailsView 連動的需求。

以 Northwind 資料庫的 Products 資料表為資料來源,首先在頁面放置一個 SqlDataSource 控制項。頁面左邊放置一個 GridView,GridView啟用分頁及選取。頁面右邊放置一個 DetailsView,並啟用編輯。GridView 與 DetailsView 繫結到同一個 SqlDataSource。

ASPX檔案的內容如下

當 GridView 選取資料列時會觸發 SelectedIndexChanging 事件,在這個事件中以 GridView 的 NewSelectedIndex 為基準去計算 DetailsView 對應的 PageIndex 即可。

執行結果如下,首先 GirdView 切換到第2頁,選取 GirdView 中 ProductID 為 15 的資料列時,DetailsView 也同步顯示同一筆資料。可在 DetailsView 中編輯此筆資料儲存後,GirdView 的資料也會同步更新。

ASP.NET 魔法學院


DotBlogs Tags: DetailsView GridView SqlDataSource

Feedback

  • Swabasic 2008/8/21 下午 03:56 回覆

    # re: GridView 與 DetailsView 連動 - 繫結同一個 SqlDataSource

    不好意思,可不可以寄檔案給我,
    因為有點不太懂,想看看原始檔案是怎樣。= =!

  • jeff377 2008/8/21 下午 08:27 回覆

    # re: GridView 與 DetailsView 連動 - 繫結同一個 SqlDataSource

    to Swabasic :
    本文中已經是完整的程式碼了。

  • Anna 2008/9/15 下午 12:34 回覆

    # re: GridView 與 DetailsView 連動 - 繫結同一個 SqlDataSource

    大大你好~~
    我照你的方法作~~
    在GirdView 選取一筆資料後
    DetailsView 也有同步顯示同一筆資料

    但是在第一筆資料編輯完成後
    我要在GirdView 選取第二筆資料時
    DetailsView 卻一直顯示前一筆資料
    無法同步
    請問為何會這樣?
    謝謝!!

  • chjiang 2010/3/10 上午 10:50 回覆

    # re: GridView 與 DetailsView 連動 - 繫結同一個 SqlDataSource

    您好~想請問一下~
    當我按某一筆「選取」顯示在Formview 之後,我再按取消,再選取其它筆會出現以下錯誤,想請教,要如何避免呢?.....
    錯誤訊息:無法載入 Viewstate。Viewstate 所要載入的控制項樹狀結構必須符合在先前要求期間用來儲存 Viewstate 的控制項樹狀結構。例如,以動態方式加入控制項時,在回傳期間加入的控制項必須符合在初始要求期間所加入控制項的型別和位置。

  • jeff 2010/3/10 下午 12:41 回覆

    # re: GridView 與 DetailsView 連動 - 繫結同一個 SqlDataSource

    to chjiang :

    你的錯訊息是因為程式碼中有動態加入控制項,而在處理 ViewState 反序列化時發生錯誤,你可以將動態加入控制項的動作往前移至 Page Init 事件試試看。

  • chjiang 2010/3/10 下午 02:26 回覆

    # re: GridView 與 DetailsView 連動 - 繫結同一個 SqlDataSource

    to jeff :
    真的很開心您的回覆,也很謝謝您熱心的指導:)
    不過,我是個asp.net初學者,所以對您說的,我還無法了解...Orz

  • jeff 2010/3/11 下午 02:56 回覆

    # re: GridView 與 DetailsView 連動 - 繫結同一個 SqlDataSource

    to chjiang :

    你可以看一下你的程式碼中是否有 new 新控制項,並使用 Controls.Add 加入至父控制項目。

    因為 ViewState 的反序列化程序是循序而非具名的,所以一旦控制項的樹狀階層結構改變時,就會造成 ViewState 反序列化的過程發生錯誤。

標題 *
名稱 *
Email (將不會被顯示)
Url
回應
登入後使用進階評論
Please add 3 and 7 and type the answer here: