我們在製作 Master/Detail 應用時, 假設使用一個 ListView 作為 Master Container, 再使用一個 ListView 作為 Detail Container, 各自透過一個 Data Source (SqlDataSource 或 ObjectDataSource 等等)。如此, 當我們在 Master Container 選取一個項目後, 下面的 Detail Container 就會顯示對應的項目...
我們在製作 Master/Detail 應用時, 假設使用一個 ListView 作為 Master Container, 再使用一個 ListView 作為 Detail Container, 各自透過一個 Data Source (SqlDataSource 或 ObjectDataSource 等等)。如此, 當我們在 Master Container 選取一個項目後, 下面的 Detail Container 就會顯示對應的項目。
然而, 在我們所看得到、找得到的範例中, 幾乎都假設原始資料表都只設定一個 Primary Key。換句話說, 在 Data Source 中的 ControlParameter 都是像這樣寫的:
<asp:ObjectDataSource ...>
<SelectParameters>
<asp:ControlParameter ControlID="ListView1" Name="ProductId" PropertyName="SelectedValue" Type="Int16" />
</SelectParameters>
但是, 如果這個資料表有兩個 Primary Key 的話, 該怎麼辦? 難道需要為此而回頭重新設計資料表結構嗎? 當然不是。其實只要把上面 SelectedValue 改做 SelectedDataKey[0] 與 SelectedDataKey[1] 就行了:
<asp:ObjectDataSource ...>
<SelectParameters>
<asp:ControlParameter ControlID="ListView1" Name="ProductId" PropertyName="SelectedDataKey[0]" Type="Int16" />
<asp:ControlParameter ControlID="ListView1" Name="CategorytId" PropertyName="SelectedDataKey[1]" Type="Int16" />
</SelectParameters>
當然, 在本例中的 ListView1 宣告中必須指定 DataKeyNames = "ProductId, CategorytId"; 像這種細節應該不用說了吧!