[主細表 / 主表明細]同一個網頁裡面,兩個GridView作關聯對應#2 有"多個"P.K.值的情況 (補充本書 Ch.9-2節)

(補充本書Ch. 9-2節的範例)
同一個網頁,兩個GridView。但有多個P.K.值的情況



特別感謝讀者 Binsh來信詢問,我才發現這一段我好像沒講到。 現在補給大家
這個範例,我會立刻加入書本的「勘誤表」,當作 9-2節的補充習題。 謝謝!




 

本書 (上集) Ch. 9-2節的範例,示範的是「單一主索引鍵」的狀況 --

請看 [習題] [主細表 / 主表明細]同一個網頁裡面,兩個GridView作關聯對應(不寫程式,只靠SqlDataSource完成)

 

 

本範例的執行畫面:

 

 

 --------------------------------------------------------------------------------------------------

依照這個問題,我們繼續思考一下:

    如果(畫面上方)第一個 GridView1,本身有多個主索引鍵(P.K.)那該怎麼辦?

 

 

我們可以自己寫程式,試一試。

範例  GridView1_Multi_PK.aspx 已經設定了 GridView1的 P.K.主索引鍵有兩個。如下圖

 

那麼,我們要擷取這兩個 P.K.值,後置程式碼應該寫成:

1     Protected Sub GridView1_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles GridView1.SelectedIndexChanged
2
3         Label1.Text = "第一個主索引鍵 == " & GridView1.SelectedDataKey.Values(0).ToString()
4         Label2.Text = "第二個主索引鍵 == " & GridView1.SelectedDataKey.Values(1).ToString()
5
6         Label3.Text = "GridView1.SelectedValue 主索引鍵 == " & GridView1.SelectedValue.ToString()
7
8     End Sub

 請注意,我們常用的 GridView1.SelectedValue,只能取出第一個PK。如果有多個PK,那就不能用這行程式碼了。

請改用上面的  GridView1.SelectedDataKey.Values(索引號碼)

因為電腦都是從「零」算起,所以第一個PK主索引鍵,編號是零!第二個的編號是 1.....以此類推。

 

 --------------------------------------------------------------------------------------------------

 

瞭解了上面的程式之後,我們可以繼續 9-2節的那個範例([習題] [主細表]同一個網頁裡面,兩個GridView作關聯對應(不寫程式,只靠SqlDataSource完成)

 GridView1 有多個 P.K. 主索引鍵時,可能就要自己動手寫程式來解決 Master-Detail(主細表)的問題了

 

本範例 GridView_Multi_PK_2.aspx   畫面設計很簡單,

但要注意 -- 底下的 GridView2,是空的!搭配任何 SqlDataSource喔!

程式也不難,同一個範本改一下即可。(關於ADO.NET的程式,本書第十四章有完整說明)

 

本範例 GridView_Multi_PK_2.aspx   後置程式碼如下:

01
02 '----自己寫的----
03 Imports System
04 Imports System.Web.Configuration
05 Imports System.Data
06 Imports System.Data.SqlClient
07 '----自己寫的----
08
09
10 Partial Class test_GridView_GridView_Multi_PK_2
11     Inherits System.Web.UI.Page
12
13     Protected Sub GridView1_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles GridView1.SelectedIndexChanged
14         '====自己手寫的程式碼, DataAdapter / DataSet ====(Start)
15         '----上面已經事先寫好 Imports System.Web.Configuration ----

16         '----連結資料庫
17         Dim Conn As New SqlConnection(WebConfigurationManager.ConnectionStrings("寫在Web.Config檔裡面 的 DB連結字串").ConnectionString)
18
19         Dim myAdapter As SqlDataAdapter
20         myAdapter = New SqlDataAdapter("select * from test where id = " & GridView1.SelectedDataKey.Values(0) & " and title = '" & GridView1.SelectedDataKey.Values(1) & "'", Conn)
21
22         Dim ds As New DataSet
23
24         Try  '==== 以下程式,只放「執行期間」的指令!=================
25             'Conn.Open()   '---- 不用寫,DataAdapter會自動開啟
26
27             myAdapter.Fill(ds, "test")    '---- 這時候執行SQL指令。取出資料,放進 DataSet。
28
29             GridView2.DataSource = ds     '----標準寫法 GridView2.DataSource = ds.Tables("test").DefaultView ----
30             GridView2.DataBind()
31
32         Catch ex As Exception
33             Response.Write("<HR/> Exception Error Message----  " + ex.ToString())
34         Finally
35             '---- 不用寫,DataAdapter會自動關閉
36             'If (Conn.State = ConnectionState.Open) Then
37             'Conn.Close()
38             'Conn.Dispose()
39             'End If
40         End Try
41     End Sub

42 End Class

 

 

完整範例,由此下載:GridView_Multi_PK.rar

 

特別感謝讀者 Binsh來信詢問,我才發現這一段我好像沒講到。   

現在補給大家

這個範例,我會立刻加入書本 (上集) 的「勘誤表」,當作 Ch. 9-2節的補充習題。  謝謝!

 

 

 

 

本系列文章,共有三篇,請看下一篇 --- [習題] [主細表]同一個網頁裡面,兩個GridView作關聯對應#3 (改用Session,盡量不寫程式)

 

我將思想傳授他人, 他人之所得,亦無損於我之所有;

猶如一人以我的燭火點燭,光亮與他同在,我卻不因此身處黑暗。----Thomas Jefferson

線上課程教學,遠距教學 (Web Form 約51hr)  https://dotblogs.com.tw/mis2000lab/2016/02/01/aspnet_online_learning_distance_education_VS2015

線上課程教學,遠距教學 (ASP.NET MVC 約75~88hr)  https://dotblogs.com.tw/mis2000lab/2018/08/14/ASPnet_MVC_Online_Learning_MIS2000Lab

ASP.NET MVC線上課程 第一天 免費看 (5.5小時) 

寫信給我,不要私訊 --  mis2000lab (at) yahoo.com.台灣  或  school (at) mis2000lab.net


ASP.NET遠距教學、線上課程(Web Form + MVC)。 第一天課程, "完整" 試聽。 

................   facebook社團   https://www.facebook.com/mis2000lab   ......................

................  YouTube (ASP.NET) 線上教學影片  https://www.youtube.com/channel/UC6IPPf6tvsNG8zX3u1LddvA/

 

Blog文章 "附的範例" 無法下載,請看 這裡 ...... https://dotblogs.com.tw/mis2000lab/2016/03/14/2008_2015_mis2000lab_sample_download

請看我們的「售後服務」範圍(嚴格認定)

...................................................................................................................................................... 

[遠距教學、教學影片] ASP.NET (Web Form) 課程 上線了!MIS2000Lab.主講

事先錄製好的影片,並非上課時側錄!   觀看影片時,有如我「一對一」跟您面對面講課

 

ASP.NET MVC 5 線上教學

         累積時數約 75~ 88小時...... 第一天(5.5小時)完整內容,"免費"讓您評估