在 Data Source 中如何設定多重 Data Key 的 SelectParameters

我們在製作 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"; 像這種細節應該不用說了吧!


Dev 2Share @ 點部落