세부 정보 DetailView와 함께 선택 가능한 마스터 GridView를 사용하는 마스터/세부 정보(C#)
작성자 : Scott Mitchell
이 자습서에는 선택 단추와 함께 각 제품의 이름과 가격이 행에 포함된 GridView가 있습니다. 특정 제품에 대한 선택 단추를 클릭하면 전체 세부 정보가 같은 페이지의 DetailsView 컨트롤에 표시됩니다.
소개
이전 자습서에서는 공급업체 목록을 표시한 "master" 웹 페이지라는 두 웹 페이지를 사용하여 master/세부 보고서를 만드는 방법을 알아보았습니다. 및 선택한 공급자가 제공한 제품을 나열하는 "세부 정보" 웹 페이지 이 두 페이지 보고서 형식은 한 페이지로 압축할 수 있습니다. 이 자습서에는 선택 단추와 함께 각 제품의 이름과 가격이 행에 포함된 GridView가 있습니다. 특정 제품에 대한 선택 단추를 클릭하면 전체 세부 정보가 같은 페이지의 DetailsView 컨트롤에 표시됩니다.
그림 1: 선택 단추를 클릭하면 제품의 세부 정보가 표시됩니다(전체 크기 이미지를 보려면 클릭).
1단계: 선택 가능한 GridView 만들기
두 페이지 master/세부 정보 보고서에서 각 master 레코드에는 클릭할 때 쿼리 문자열에서 클릭한 행의 SupplierID
값을 전달하는 세부 정보 페이지로 사용자를 보내는 하이퍼링크가 포함되어 있음을 기억하세요. 이러한 하이퍼링크는 HyperLinkField를 사용하여 각 GridView 행에 추가되었습니다. 단일 페이지 master/세부 정보 보고서의 경우 클릭할 때 세부 정보를 표시하는 각 GridView 행에 대한 Button이 필요합니다. GridView 컨트롤은 포스트백을 유발하고 해당 행을 GridView의 SelectedRow로 표시하는 각 행에 대해 선택 단추를 포함하도록 구성할 수 있습니다.
먼저 폴더의 페이지에 GridView 컨트롤을 DetailsBySelecting.aspx
Filtering
추가하고 속성을 ID
ProductsGrid
로 설정합니다. 다음으로 클래스의 GetProducts()
메서드를 호출하는 라는 AllProductsDataSource
새 ObjectDataSource를 ProductsBLL
추가합니다.
그림 2: ObjectDataSource 명명된 AllProductsDataSource
만들기(전체 크기 이미지를 보려면 클릭)
그림 3: 클래스 사용 ProductsBLL
(전체 크기 이미지를 보려면 클릭)
그림 4: ObjectDataSource를 구성하여 메서드 호출 GetProducts()
(전체 크기 이미지를 보려면 클릭)
및 UnitPrice
BoundFields를 제외한 모든 항목을 제거하는 GridView의 ProductName
필드를 편집합니다. 또한 필요에 따라 BoundField를 통화로 서식 지정 UnitPrice
하고 BoundFields의 속성을 변경하는 HeaderText
등 이러한 BoundFields를 자유롭게 사용자 지정할 수 있습니다. 이러한 단계는 GridView의 스마트 태그에서 열 편집 링크를 클릭하거나 선언적 구문을 수동으로 구성하여 그래픽으로 수행할 수 있습니다.
그림 5: 및 UnitPrice
BoundFields를 ProductName
제외한 모든 항목 제거(전체 크기 이미지를 보려면 클릭)
GridView의 최종 태그는 다음과 같습니다.
<asp:GridView ID="ProductsGrid" runat="server"
AutoGenerateColumns="False" DataKeyNames="ProductID"
DataSourceID="AllProductsDataSource" EnableViewState="False">
<Columns>
<asp:BoundField DataField="ProductName"
HeaderText="Product" SortExpression="ProductName" />
<asp:BoundField DataField="UnitPrice"
DataFormatString="{0:c}" HeaderText="Unit Price"
HtmlEncode="False" SortExpression="UnitPrice" />
</Columns>
</asp:GridView>
다음으로 GridView를 선택 가능한 것으로 표시해야 합니다. 그러면 각 행에 선택 단추가 추가됩니다. 이렇게 하려면 GridView의 스마트 태그에서 선택 사용 확인란을 검사.
그림 6: GridView의 행을 선택할 수 있도록 설정(전체 크기 이미지를 보려면 클릭)
선택 사용 옵션을 선택하면 속성이 True로 ProductsGrid
설정된 GridView에 CommandField가 ShowSelectButton
추가됩니다. 그림 6과 같이 GridView의 각 행에 대해 선택 단추가 생성됩니다. 기본적으로 선택 단추는 LinkButtons로 렌더링되지만 CommandField의 ButtonType
속성을 통해 단추 또는 ImageButtons를 대신 사용할 수 있습니다.
<asp:GridView ID="ProductsGrid" runat="server"
AutoGenerateColumns="False" DataKeyNames="ProductID"
DataSourceID="AllProductsDataSource" EnableViewState="False">
<Columns>
<asp:CommandField ShowSelectButton="True" />
<asp:BoundField DataField="ProductName"
HeaderText="Product" SortExpression="ProductName" />
<asp:BoundField DataField="UnitPrice"
DataFormatString="{0:c}" HeaderText="Unit Price"
HtmlEncode="False" SortExpression="UnitPrice" />
</Columns>
</asp:GridView>
GridView 행의 선택 단추를 클릭하면 포스트백이 계속되고 GridView의 SelectedRow
속성이 업데이트됩니다. GridView는 SelectedRow
속성 외에도 SelectedIndex, SelectedValue 및 SelectedDataKey 속성을 제공합니다. 속성은 선택한 행의 인덱스를 반환하는 반면 SelectedValue
및 SelectedDataKey
속성은 SelectedIndex
GridView의 DataKeyNames 속성에 따라 값을 반환합니다.
속성은 DataKeyNames
하나 이상의 데이터 필드 값을 각 행과 연결하는 데 사용되며 일반적으로 각 GridView 행과 함께 기본 데이터에서 고유하게 식별되는 정보를 특성으로 지정하는 데 사용됩니다. 속성은 SelectedValue
선택한 행에 대한 첫 번째 DataKeyNames
데이터 필드의 값을 반환합니다. 여기서 SelectedDataKey
속성은 선택한 행의 DataKey
개체를 반환하며, 여기에는 해당 행에 대해 지정된 데이터 키 필드의 모든 값이 포함됩니다.
속성은 DataKeyNames
Designer 통해 GridView, DetailsView 또는 FormView에 데이터 원본을 바인딩할 때 고유하게 식별되는 데이터 필드로 자동으로 설정됩니다. 이 속성은 이전 자습서에서 자동으로 설정되었지만 속성이 지정되지 않은 경우 예제가 DataKeyNames
작동했을 것입니다. 그러나 이 자습서의 선택 가능한 GridView와 삽입, 업데이트 및 삭제 DataKeyNames
를 검사할 이후 자습서의 경우 속성을 올바르게 설정해야 합니다. 잠시 시간을 내어 GridView의 DataKeyNames
속성이 로 설정되어 있는지 확인합니다 ProductID
.
지금까지 브라우저를 통해 진행 상황을 살펴보겠습니다. GridView는 Select LinkButton과 함께 모든 제품의 이름과 가격을 나열합니다. 선택 단추를 클릭하면 포스트백이 발생합니다. 2단계에서는 선택한 제품에 대한 세부 정보를 표시하여 DetailsView가 이 포스트백에 응답하도록 하는 방법을 알아봅니다.
그림 7: 각 제품 행에 LinkButton 선택 포함(전체 크기 이미지를 보려면 클릭)
선택한 행 강조 표시
ProductsGrid
GridView에는 SelectedRowStyle
선택한 행의 비주얼 스타일을 지시하는 데 사용할 수 있는 속성이 있습니다. 올바르게 사용하면 현재 선택된 GridView의 행을 보다 명확하게 표시하여 사용자 환경을 개선할 수 있습니다. 이 자습서에서는 선택한 행을 노란색 배경으로 강조 표시해 보겠습니다.
이전 자습서와 마찬가지로 CSS 클래스로 정의된 미적 관련 설정을 유지해 보겠습니다. 따라서 라는 SelectedRowStyle
에 새 CSS 클래스를 Styles.css
만듭니다.
.SelectedRowStyle
{
background-color: Yellow;
}
자습서 시리즈의 모든 GridViews 속성에 이 CSS 클래스 SelectedRowStyle
를 적용하려면 아래와 같이 설정을 포함하도록 테마의 DataWebControls
스킨을 SelectedRowStyle
편집 GridView.skin
합니다.
<asp:GridView runat="server" CssClass="DataWebControlStyle">
<AlternatingRowStyle CssClass="AlternatingRowStyle" />
<RowStyle CssClass="RowStyle" />
<HeaderStyle CssClass="HeaderStyle" />
<SelectedRowStyle CssClass="SelectedRowStyle" />
</asp:GridView>
이 추가를 사용하면 선택한 GridView 행이 노란색 배경색으로 강조 표시됩니다.
그림 8: GridView의 속성을 사용하여 선택한 행의 SelectedRowStyle
모양 사용자 지정(전체 크기 이미지를 보려면 클릭)
2단계: DetailsView에서 선택한 제품의 세부 정보 표시
GridView가 ProductsGrid
완료되면 선택한 특정 제품에 대한 정보를 표시하는 DetailsView를 추가하기만 하면 됩니다. GridView 위에 DetailsView 컨트롤을 추가하고 라는 ProductDetailsDataSource
새 ObjectDataSource를 만듭니다. 이 DetailsView에서 선택한 제품에 대한 특정 정보를 표시하도록 하려면 클래스의 GetProductByProductID(productID)
메서드를 사용하도록 을 ProductsBLL
구성 ProductDetailsDataSource
합니다.
그림 9: 클래스의 GetProductByProductID(productID)
메서드 호출ProductsBLL
(전체 크기 이미지를 보려면 클릭)
productID
GridView 컨트롤의 속성에서 매개 변수의 SelectedValue
값을 가져옵니다. 앞에서 설명한 대로 GridView의 SelectedValue
속성은 선택한 행에 대한 첫 번째 데이터 키 값을 반환합니다. 따라서 선택한 행 ProductID
의 값이 에서 반환SelectedValue
되도록 GridView의 DataKeyNames
속성을 로 설정ProductID
해야 합니다.
그림 10: 매개 변수를 GridView의 SelectedValue
속성으로 설정합니다productID
(전체 크기 이미지를 보려면 클릭).
productDetailsDataSource
ObjectDataSource가 올바르게 구성되고 DetailsView에 바인딩되면 이 자습서가 완료됩니다. 페이지를 처음 방문하면 행이 선택되지 않으므로 GridView의 SelectedValue
속성은 를 반환합니다 null
. 값이 있는 NULL
ProductID
제품이 없으므로 메서드에서 레코드를 반환 GetProductByProductID(productID)
하지 않으므로 DetailsView가 표시되지 않습니다(그림 11 참조). GridView 행의 선택 단추를 클릭하면 포스트백이 계속되고 DetailsView가 새로 고쳐집니다. 이번에는 GridView의 SelectedValue
속성이 선택한 행의 를 반환 ProductID
하고 메서드 GetProductByProductID(productID)
는 특정 제품에 대한 정보가 포함된 을 ProductsDataTable
반환하고 DetailsView는 이러한 세부 정보를 표시합니다(그림 12 참조).
그림 11: 처음 방문했을 때 GridView만 표시됩니다(전체 크기 이미지를 보려면 클릭).
그림 12: 행을 선택하면 제품의 세부 정보가 표시됩니다(전체 크기 이미지를 보려면 클릭).
요약
이 자습서와 앞의 세 가지 자습서에서는 master/세부 보고서를 표시하는 다양한 기술을 살펴보았습니다. 이 자습서에서는 선택한 GridView를 사용하여 master 레코드를 보관하고 DetailsView를 사용하여 선택한 master 레코드에 대한 세부 정보를 동일한 페이지에 표시했습니다. 이전 자습서에서는 DropDownLists를 사용하여 master/세부 정보 보고서를 표시하고 한 웹 페이지에 master 레코드를 표시하고 다른 웹 페이지에 세부 정보 레코드를 표시하는 방법을 살펴보았습니다.
이 자습서에서는 master/세부 보고서 검사를 완료합니다. 다음 자습서부터 GridView, DetailsView 및 FormView를 사용하여 사용자 지정된 서식 탐색을 시작합니다. 바인딩된 데이터에 따라 이러한 컨트롤의 모양을 사용자 지정하는 방법, GridView 바닥글의 데이터를 요약하는 방법 및 템플릿을 사용하여 레이아웃에 대한 더 높은 수준의 제어를 얻는 방법을 살펴보겠습니다.
행복한 프로그래밍!
저자 정보
7개의 ASP/ASP.NET 책의 저자이자 4GuysFromRolla.com 창립자인 Scott Mitchell은 1998년부터 Microsoft 웹 기술을 연구해 왔습니다. Scott은 독립 컨설턴트, 트레이너 및 작가로 일합니다. 그의 최신 책은 샘스 자신을 가르친다 ASP.NET 2.0 24 시간. 그는 에서 찾을 수있는 그의 블로그를 통해 또는 에 mitchell@4GuysFromRolla.comhttp://ScottOnWriting.NET도달 할 수 있습니다.
특별 감사
이 자습서 시리즈는 많은 유용한 검토자가 검토했습니다. 이 자습서의 수석 검토자는 Hilton Giesenow였습니다. 예정된 MSDN 문서를 검토하시겠습니까? 그렇다면 에 줄을 놓습니다 mitchell@4GuysFromRolla.com.
피드백
https://aka.ms/ContentUserFeedback
출시 예정: 2024년 내내 콘텐츠에 대한 피드백 메커니즘으로 GitHub 문제를 단계적으로 폐지하고 이를 새로운 피드백 시스템으로 바꿀 예정입니다. 자세한 내용은 다음을 참조하세요.다음에 대한 사용자 의견 제출 및 보기