이전 기사에서는 ControlParameter(컨트롤 매개 변수)를 GridView의 SelectedValue 속성과 연결하여 마스터-슬레이브 데이터 테이블을 구현하는 방법을 이미 알고 있었습니다. SelectedValue 속성은 DataKeyNames 속성에 지정된 첫 번째 필드의 값을 반환합니다. DataKeyNames 속성에 여러 개의 쉼표로 구분된 필드 값을 지정할 수도 있습니다. 예를 들어 테이블의 데이터 소스에 여러 값을 전달해야 할 수도 있습니다. 이러한 추가 키 필드 값은 키 필드의 이름/값 쌍을 포함하는 DataKey 개체를 반환하는 SelectedDataKey 속성을 통해 노출됩니다. ControlParameter는 식에서 PropertyName 속성을 설정하여 이러한 키를 참조할 수도 있습니다(예: SelectedDataKey.Values("title_id")).
<asp:ControlParameter Name="FirstKey" ControlID="MasterGrid" PropertyName="SelectedDataKey.Values[0]"/>
<asp:ControlParameter Name="SecondKey" ControlID="MasterGrid" PropertyName="SelectedDataKey.Values[1]"/>
다음 예에서는 DataKeys 컬렉션을 열거하고 SelectedDataKey에서 키 필드 값을 가져오는 코드를 보여줍니다. GridView:
보호된 하위 GridView1_SelectedIndexChanged(ByVal 보낸 사람을 개체로, ByVal e를 System.EventArgs로)
Response.Write("<b>SelectedDataKey.Value: </b>" & Server.HtmlEncode(GridView1.SelectedDataKey.Value) & "<br />")
Response.Write("<b>DataKey 필드 1: </b>" & Server.HtmlEncode(GridView1.SelectedDataKey.Values("au_id")) & "<br />")
Response.Write("<b>DataKey 필드 2: </b>" & Server.HtmlEncode(GridView1.SelectedDataKey.Values("title_id")) & "<br />")
서브 끝
보호된 하위 GridView1_DataBound(ByVal 보낸 사람을 개체로, ByVal e를 System.EventArgs로)
데이터 키로 희미한 키
Response.Write("<b>GridView 데이터 키: </b><br />")
GridView1.DataKeys의 각 키에 대해
Response.Write(Server.HtmlEncode(key.Values(0)) & ", ")
Response.Write(Server.HtmlEncode(key.Values(1)) & "<br/>")
다음
End Sub
슬레이브 테이블의 데이터를 양식의 독립적인 컨트롤로 표시하지만 때로는 슬레이브 테이블 컨트롤이 마스터 테이블 컨트롤에 중첩되어 마스터 테이블의 일부로 표시되기를 원할 때도 있습니다. . 이 기능을 수행하려면 슬레이브 테이블 컨트롤 및 관련 데이터 소스를 메인 테이블 컨트롤의 템플릿에 포함해야 하며, 메인 테이블 데이터 소스의 필드에서 값을 가져오는 데이터 소스 매개 변수가 있어야 합니다. 이 접근 방식과 연결할 선언적 매개 변수 개체가 없으므로 코드에서 프로그래밍 방식으로 매개 변수 값을 설정해야 합니다. 기본 테이블 컨트롤의 데이터 항목이 바인딩되면 기본 테이블 컨트롤의 이벤트 처리기(예: FormView의 DataBound 이벤트)에서 매개 변수 값을 설정할 수 있습니다. 다음 예에서는 이 기술을 보여줍니다.
<스크립트 runat="서버">
보호된 하위 FormView1_DataBound(ByVal 보낸 사람을 개체로, ByVal e를 System.EventArgs로)
OrderDetailsDataSource.SelectParameters("OrderID").DefaultValue = FormView1.DataItem("OrderID")
서브 끝
</script>
<asp:FormView DataSourceID="OrdersDataSource"…
<아이템템플릿>
<b>주문ID:</b>
<asp:Label ID="OrderIDLabel" runat="server" Text='<%# Eval("OrderID") %>'></asp:Label><br />
…
<asp:GridView DataSourceID="OrderDetailsDataSource" ……>
…
</asp:그리드뷰>
</아이템템플릿>
</asp:FormView>
<asp:SqlDataSource ConnectionString="<%$ ConnectionStrings:Northwind %>" ID="OrdersDataSource" runat="server" SelectCommand="SELECT [OrderID], [OrderDate], [ShipCity], [ShipCountry " ] FROM [주문]">
</asp:SqlDataSource>
<asp:SqlDataSource ConnectionString="<%$ ConnectionStrings:Northwind %>" ID="OrderDetailsDataSource" runat="server" SelectCommand="SELECT [주문 세부 정보].OrderID, Products.ProductName, [주문 세부 정보].UnitPrice, [주문 세부 정보].Quantity FROM [주문 세부 정보] INNER JOIN Products ON [주문 세부 정보].ProductID = Products.ProductID WHERE [주문 세부 정보].OrderID = @OrderID">
<파라미터 선택>
<asp:매개변수 이름="OrderID" />
<//매개변수 선택>
</asp:SqlDataSource>
다음 예제에서는 DataList를 사용하고 DataList의 ItemDataBound 이벤트를 처리하여 데이터 소스 매개 변수 값을 설정하는 유사한 기술을 보여줍니다.
<스크립트 runat="서버">
보호된 하위 DataList1_ItemDataBound(ByVal 보낸 사람을 개체로, ByVal e를 System.Web.UI.WebControls.DataListItemEventArgs로)
Dim s As SqlDataSource = e.Item.FindControl("OrderDetailsDataSource")
s.SelectParameters("OrderID").DefaultValue = e.Item.DataItem("OrderID")
서브 끝
</스크립트>