Datagrid 컨트롤
Datagrid Control을 사용하면 풍부한 데이터 소스 형식 목록을 생성 할 수 있습니다. 또한 다른 작업이있는 선택 항목도 지원합니다.
이 섹션의 네 가지 예는 제목 정보 (제목, 제목 ID, 저자, 가격 및 게시 날짜)를 포함하는 테이블을 사용합니다. 모든 데이터는 titlesdb.xml에서 XML로 유지됩니다. 이 테이블의 내용을 나타내고 책을 선택하기위한 페이지를 설정할 때이 예제는 증분 방법을 따릅니다. 코드 목록에는 이전 예제에 내장 된 샘플로 변경된 변경 사항을 나타내는 흑체 텍스트가 포함되어 있습니다.
TitleSDB.XML에서 테스트 :
<루트>
<schema id = documentElement targetnamespace =
xmlns = http://www.w3.org/1999/xmlschema
XMLNS : MSDATA = URN : Schemas-Microsoft-Com : XML-MSDATA>
<요소 이름 = 테이블>
<complextype content = elementsonly>
<요소 이름 = title_id type = String> </element>
<요소 이름 = 제목 유형 = 문자열> </element>
<요소 이름 = au_name 유형 = 문자열> </element>
<요소 이름 = price msdata : datatype = system.currency
minoccurs = 0
타입 = 문자열> </element>
<요소 이름 = pubdate 유형 = TimeInstant> </element>
</complexType>
<nique name = titleconstraint msdata : primarykey = true>
<selector>. </selector>
<field> title_id </field>
</독특한>
</요소>
</schema>
<DocumentElement>
<title>
<title_id> bu1032 </title_id>
<title> 바쁜 임원의 데이터베이스 가이드 </title>
<UM_Name> Marjorie Green </au_name>
<price> 19.99 </price>
<Pubdate> 1991-06-12T07 : 00 : 00 </pubdate>
</제목>
탄력 있는
</documentElement>
</root>
일반적인 웹 애플리케이션에서 최대 확장 성과 성능을 얻기 위해 웹 서비스 또는 비즈니스 객체를 사용하여 데이터에 액세스 할 수 있습니다. 이러한 예제를 단순화하고 데이터 액세스 대신 Datagrid 사용에 중점을 두려면 응용 프로그램이 시작될 때 한 번에 데이터를로드하고 Global.asax Show의 ASP 응용 프로그램 상태에 있습니다.
Global.asax의 트렁크 :
public void application_onstart () {) {)
filestream fs = null;
데이터 세트 ds = null;
노력하다 {
fs = new Filestream (Server.mappath (titlesdb.xml), filemode.open,
fileaccess.read);
ds = 새로운 데이터 세트 ();
// XML 파일의 데이터를 데이터 세트에로드합니다.
ds.Readxml (fs);
} 마지막으로 {
if (fs! = null) {
fs.close ();
fs = null;
}
}
// 단일 페이지에서 사용할 수 있도록 데이터 세트를 응용 프로그램 상태로 고속으로 CCHESTRATE
응용 프로그램 [titlesDataset] = ds;
}
Datagrid1
Datagrid1은 DataGrid의 기본 사용법을 보여줍니다. 여기서 컨트롤이 가장 적은 사용자 코드를 사용하여 풍부한 기능을 생성하는 방법을 설명합니다.
무화과
Datagrid1.aspx에서 삽입 :
<%@page language = c# src = datagrid.cs 상속 = 샘플 .DatagridPage%>
탄력 있는
<asp : datagrid runat = server id = titlesgrid>
</asp : datagrid>
위의 .aspx 파일은 Datagrid 컨트롤의 속성이없는 속성이없는 명령문을 보여주었습니다.
Datagrid.cs :
네임 스페이스 샘플 {
탄력 있는
공개 클래스 DataGridPage : Page {
보호 된 Datagrid TitlesGrid;
공개 icollection getTitlesList () {
// 응용 프로그램 상태의 고속 캐시 데이터 세트에서 제목 목록을 다시 보냅니다.
DataSet TitlesDataset = (DataSet) 응용 프로그램 [TitleSdatAset];
if (titlesDataset! = null) {
return titledataset.tables [title] .defaultView;
}
또 다른 {
널 리턴;
}
}
Private void loadTitlesGrid () {) {)
// 데이터베이스에서 데이터를 검색합니다
icollection titleslist = getTitlesList ();
// 컨트롤의 데이터 소스를 설정합니다
TitlesGrid.datasource = TitleSlist;
//이 데이터 소스를 사용하여 프로젝트를 구축하십시오.
TitlesGrid.databind ();
}
보호 된 재정의 void Overoad (EventArgs e) {{
베이스. 온부하 (e);
if (! ispostback) {
// 처음 으로이 페이지를 참조하십시오
loadTitlesGrid ();
}
}
}
}
.CS 파일에는이 페이지에 사용 된 코드가 포함되어 있습니다. 이 코드는 Datalist1 예제에 사용 된 코드 기능과 동일합니다. 이 페이지의 첫 번째 요청에서는 데이터를 검색하고 Databind를 호출하기 전에 컨트롤의 데이터 소스 속성을 설정하는 온라인 메소드를 다룹니다. 이렇게하면 Datagrid가 프로젝트를 생성하게됩니다.이 프로젝트는 테이블에 필요한 행입니다. 처리 처리 과정에서 DataGrid는 상태에서 프로젝트를 다시 만들었습니다 (이 상태는 마지막 요청에 저장된 셀 내용이 포함되어 있음).
이 예제는 Datagrid 컨트롤의 AutogenerateColumns 속성의 기능을 보여줍니다. 이 속성의 기본값은 참입니다. true로 설정되면 Datagrid는 반사를 사용하여 데이터 소스 및 객체를 확인하고 각 공개 속성 또는 필드에 대한 열을 만듭니다. 이 예에서 컨트롤은 "제목"테이블의 모든 현재 필드를 나타냅니다. 이 기능을 사용하면 최소한의 사용자 코드 목록이 데이터 소스 목록을 빠르고 쉽게 생성 할 수 있습니다.
각 유형의 자동 열은 BoundColumn입니다. 이 열 유형은 그것과 관련된 속성 값을 창으로 사용해야하는 문자열로 변환합니다.
Datagrid2
Datagrid2는 .aspx 파일에 설정된 열에 따라 설정된 Datagrid를 설명합니다.
그림 5. 지정된 열 데이터 그 리드를 사용하여 생성 된 예제
DataGrid2.aspx에서 발췌 :
<%@page language = c# src = datagrid.cs 상속 = 샘플 .DatagridPage%>
탄력 있는
<asp : datagrid runat = server id = titlesgrid
AutogenerateColumns = false>
<Poperty Name = 열>
<ASP : BoundColumn HeadelText = Title Datafield = Title/>
<ASP : BoundColumn HeadElText = author DataField = AU_NAME/>
<ASP : BoundColumn HeaderText = 날짜 게시 데이터 필드 = PubDate/>
<ASP : BoundColumn HeadelText = 가격 데이터 필드 = 가격/>
</property>
</asp : datagrid>
이 .aspx 파일은 사용자가 설정 한 열이있는 Datagrid 컨트롤을 보여주었습니다. 이 예제는 코드가 필요하지 않기 때문에 동일한 코드 -지원 파일을 Datagrid1과 사용합니다.
Datagrid의 AutogenerateColumns 속성은 컨트롤이 자동으로 열을 생성하는 것을 방지하기 위해 가짜로 설정되어 있으며 사용자는 테이블에 표시 될 열을 정의 할 책임이 있습니다.
많은 이점이 있습니다.
열 순서를 제어 할 수 있습니다. 명세서의 순서대로 나열하십시오. 반면, 자동 열은 이미지에 의해 검색된 순서로 표시됩니다.
열 헤드 텍스트 속성으로 각 열의 헤더를 지정할 수 있습니다. 이전 예에서는 레이블 헤더가 필드 이름을 나타내며 적절하지 않을 수 있습니다. 이 모드에서 컨트롤을 사용할 때 Columbns는 다른 설정 가능한 속성도 제공합니다.
자동 열의 유형은 항상 경계입니다. 사용자가 각 열의 유형을 제어 할 수 있도록 열 설정을 지정하십시오.
Datagrid3
Datagrid3은 시각적 형식 및 형식을 추가하여 Datagrid2를 구축합니다.
그림 6. 스타일 및 형식 속성을 설정하는 Datagrid에 의해 생성 된 예제
DataGrid3.aspx에서 발췌 :
<%@page language = c# src = datagrid.cs 상속 = 샘플 .DatagridPage%>
탄력 있는
<asp : datagrid runat = server id = titlesgrid
AutogenerateColumns = false
너비 = 80%
백 콜러 = 흰색
BorderWidth = 1px Borderstyle = Solid CellPadding = 2 Cellspacing = 0
BorderColor = 황갈색
font-name = 송 스타일 font-size = 8pt>
<Poperty Name = 열>
<ASP : BoundColumn HeadelText = Title Datafield = Title/>
<ASP : BoundColumn HeadElText = author DataField = AU_NAME/>
<ASP : BoundColumn HeaderText = 날짜 게시 데이터 필드 = PubDate
dataformatstring = {0 : mmm yyyy}/>
<ASP : BoundColumn HeadelText = 가격 데이터 필드 = 가격
dataformatstring = {0 : c}>
<Poperty Name = ItemStyle>
<ASP : TableItemStyle Horizontalalign = Right/>
</property>
</asp : bounddcolumn>
</property>
<Poperty Name = Headstyle>
<ASP : TableItemStyle BackColor = Darkred Forecolor = White
font-black = true/>
</property>
<Poperty Name = ItemStyle>
<ASP : TableItemStyle Forecolor = DarkSlateBlue/>
</property>
<Poperty Name = AlternatingItemStyle>
<ASP : TableItemStyle BackColor = Beige/>
</property>
</asp : datagrid>
이 .aspx 파일은 이전과 동일한 DataGrid 제어 문을 보여 주었고 다양한 스타일 속성을 설정했습니다. 이것은 더 매력적인 표현으로 이어질 것입니다. 코드를 변경할 필요가 없으며 이전 예제와 동일한 예제에서 지원되는 코드 사용이 여전히 필요하지 않습니다.
WebControl에서 얻을 수 있으므로 Datagrid 컨트롤은 너비, 백콜러, Borderstyle 및 Font.Name과 같은 스타일 속성을 상속합니다. 또한 Datagrid는 테이블에만 해당되는 CellPadding과 같은 속성을 제공합니다. 이러한 속성은 전체의 컨트롤을 사용자 정의 할 수 있습니다.
이 문장에는 헤더 스타일 및 교대 스타일과 같은 여러 프로젝트 스타일 세트가 표시됩니다. 이 스타일은 해당 항목의 모양을 제어합니다. 이 예제에는 스타일의 스타일이 나타납니다. 대체 프로젝트는 일반적인 프로젝트의 전망과 동일합니다. 스타일은 교대 스타일과 ItemStyle의 조합이기 때문입니다. 마지막으로,이 예제는 또한 오른쪽 -TO -Alignment 가격 열의 텍스트를 통해 특정 열의 스타일을 설명합니다.
Datagrid를 사용하면 셀의 텍스트 내용을 포맷 할 수 있습니다. 이것은 BoundColumn의 DataFormatString 속성 값을 설정하여 완료됩니다. 열은 형식을 사용하여 string.format의 셀 내용을 포맷합니다. 이 속성은 서식 유형 (예 : 날짜 또는 통화)의 컨텐츠에 사전 설정되거나 첨부 될 수 있습니다. 또한 서식은 CultureInfo 및 현재 페이지의 요청을 고려하기 때문에 세계화도 지원합니다. 지정된 형식이없는 경우이 값의 Tostring 메소드를 사용하십시오.
Datagrid4
Datagrid4는 선택한 indindexChanged 이벤트를 처리하여 Datagrid에서 선택을 사용하는 방법을 설명합니다.
그림 7. Datagrid 포함 항목을 허용하여 생성 된 예제
datagrid4.aspx에서 테스트 :
<%@page language = c# src = datagrid4.cs 상속 = 샘플 .datagrid4page%>
탄력 있는
<asp : datagrid runat = server id = titlesgrid
AutogenerateColumns = false
너비 = 80%
백 콜러 = 흰색
BorderWidth = 1px Borderstyle = Solid CellPadding = 2 Cellspacing = 0
BorderColor = 황갈색
font-name = 송 스타일 font-size = 8pt
Datakeyfield = Title_id
onselectedExChanged = onselectexChangedEdeDesgrid>
<Poperty Name = 열>
<ASP : ButtonColumn Text = select command = select/>
<ASP : BoundColumn HeadelText = Title Datafield = Title/>
<ASP : BoundColumn HeadElText = author DataField = AU_NAME/>
<ASP : BoundColumn HeaderText = 날짜 게시 데이터 필드 = PubDate
dataformatstring = {0 : mmm yyyy}/>
<ASP : BoundColumn HeadelText = 가격 데이터 필드 = 가격
dataformatstring = {0 : c}>
<Poperty Name = ItemStyle>
<ASP : TableItemStyle Horizontalalign = Right/>
</property>
</asp : bounddcolumn>
</property>
<Poperty Name = Headstyle>
<ASP : TableItemStyle BackColor = Darkred Forecolor = White
font-black = true/>
</property>
<Poperty Name = ItemStyle>
<ASP : TableItemStyle Forecolor = DarkSlateBlue/>
</property>
<Poperty Name = AlternatingItemStyle>
<ASP : TableItemStyle BackColor = Beige/>
</property>
<Poperty name = selectDitemStyle>
<ASP : TableItemStyle BackColor = PaleGoldenRod font-bold = true/>
</property>
</asp : datagrid>
탄력 있는
<ASP : 레이블 runat = Server id = selectInfolabel font-name = 송 스타일 font-size = 8pt/>
.ASPX 파일에서 이벤트 처리 프로그램이 DataGrid의 선택된 indexChanged 이벤트 이벤트에 등록되었습니다. 이 사건 처리 프로그램은 코드 지원 파일로 구현됩니다. "select"로 열 세트에 추가 된 ButtonColumn은 Datagrid가 각 프로젝트의 선택 버튼을 포함하는 추가 열을 나타냅니다. 동시에 SelectedItemStyle이 지정됩니다. 이 스타일은 프로젝트를 시각적으로 구별하는 데 사용됩니다. 마지막으로 Datagrid의 Datakeyfield 속성이 지정됩니다. 이 필드는 Datagrid Datakeys 컬렉션에 배치되며 코드 지원이있는 파일에 사용됩니다.
datagrid4.cs :
네임 스페이스 샘플 {
탄력 있는
공개 클래스 Datagrid4Page : Page {
보호 된 Datagrid TitlesGrid;
보호 된 라벨 SearchInfolabel;
공개 icollection getTitlesList () {
// 응용 프로그램 상태의 고속 캐시 데이터 세트에서 제목 목록을 다시 보냅니다.
DataSet TitlesDataset = (DataSet) 응용 프로그램 [TitleSdatAset];
if (titlesDataset! = null) {
return titledataset.tables [title] .defaultView;
}
또 다른 {
널 리턴;
}
}
Private void loadTitlesGrid () {) {)
// 데이터베이스에서 데이터를 검색합니다
icollection titleslist = getTitlesList ();
// 컨트롤의 데이터 소스를 설정하고 선택을 재설정하고
TitlesGrid.datasource = TitleSlist;
titlesgrid.selectDindex = -1;
// 제어 가이 데이터 소스를 사용하여 프로젝트를 구축하십시오.
TitlesGrid.databind ();
// 선택한 제목 정보를 업데이트합니다
updateSelectTitalInfo ();
}
보호 된 재정의 void Overoad (EventArgs e) {{
베이스. 온부하 (e);
if (! ispostback) {
// 처음 으로이 페이지를 참조하십시오
loadTitlesGrid ();
}
}
// DataGrid의 OnSelEctIndIndEdexChanged 이벤트를 처리합니다
보호 된 void onselectedIndIndexChangedTitlesGrid (객체 발신자,
EventArgs e) {
updateSelectTitalInfo ();
}
private void updateSelectTitiveInfo () {{) {
// 선택한 색인을 가져옵니다
int selindex = titlesgrid.selectex;
문자열 selfieid = null;
문자열 selectInfo;
if (selindex! = -1) {{
// 선택한 제목의 키 필드를 표시합니다
seltitleid = (String) TitlesGrid.data [selindex];
선택한 제목의 선택 ID : + seltitleId;
}
또 다른 {
selectInfo = 현재 제목이 선택되지 않았습니다.;
}
selectinfolabel.text = selectInfo;
}
}
}
이 .cs 파일에는 선택된 indexChaned 이벤트를 처리하는 논리와 DataGrid에서 선택한 제목의 ID 논리가 포함되어 있습니다. Datagrid는 프로젝트에 포함 된 버튼으로 트리거되는 명령 이벤트를 처리합니다. 표준 명령 "select"를 인식하여 선택한 index 속성을 변경 하고이 사건을 트리거하여 사용자에게 알리는 코드를 변경합니다.
이벤트 처리 프로그램을 구현하는 과정에서 예제 코드는 updateSelectTitleInfo 메소드를 호출합니다. 이 방법은 선택한 책 제목에 대한 정보를 표시합니다.이 예에서는 ID입니다. 보다 현실적인 체계 에서이 ID를 사용하여 페이지를 연결하여 선택한 제목에 대한 자세한 내용을 표시 할 수 있습니다.
Datakeys 컬렉션을 방문하여 ID를 검색합니다. 컬렉션은 Datakeyfield 속성으로 인해 설정됩니다. 일반적으로 가정에서 식별 할 수있는 기본 키워드 또는 기타 필드로 설정 하고이 정보를 다음 -UP 데이터베이스 쿼리 또는 필터 데이터의 지침으로 사용하십시오.
이 예제는 데이터 소스의 객체 만 추가로 데이터 소스에서 개체 선택과 같은 작업을 추가로 지원하는 방법을 보여줍니다. Datagrid에는 분류, 페이징, 시설 편집기 및 TemplateColumn과 같은 다른 여러 기능에 대한 지원이 포함되어 있습니다. 그러나 이러한 특정 기능은이 기사에 대한 토론의 범위를 초과하며 향후 기사에서 논의 될 것입니다.
리피터, Datalist 또는 Datagrid?
리피터, Datalist 및 Datagrid Control 공유 공개 프로그래밍 모델. 동시에 각 컨트롤은 특정 체계에 초점을 맞추기 위해 설계되었습니다. 이 섹션에서는 제어 계층의 기능 및 각 컨트롤의 기능뿐만 아니라 각 컨트롤이 사용될 수있는 일반적인 솔루션의 예를 설명합니다.
아래 클래스 구조에서 볼 수 있듯이 리피터는 작고 가벼운 제어입니다. ID 속성 및 하위 제어 세트와 같은 기본 제어 클래스의 함수 만 상속합니다. 반면, Datalist Control 및 Datagrid Control은 스타일 및 외관 속성과 같은 웹 구성 기능을 상속합니다.
그림 8. 목록 -클래스 레벨 구조의 결합 제어
객체 모델 측면에서, 리피터 제어는 가장 간단한 제어입니다. 또한 가장 작은 데이터 바인딩 제어이며 기본적으로 다릅니다. 즉, 특별한 UI 레이아웃을 강요하지는 않습니다. 최종 표시 방법은 텍스트를 생성하는 방법을 따릅니다. 이 컨트롤은 스타일과 외관 속성 또는 행동에 대한 지원을 제공하지 않습니다. 완전히 제어 해야하는 솔루션을위한 훌륭한 선택입니다.
Datalist Control은 열 레이아웃 또는 스트림 레이아웃을 사용하도록 강요되는 리피터입니다. WebControl에서 구현 된 모양 속성을 상속하고 생성 된 항목에 적합한 다른 스타일 속성을 추가합니다. Datalist Control에는 프로젝트 표준 운영 (예 : 선택, 편집 및 삭제)에 대한 지원도 포함됩니다. 행 또는 행에 분포 된 레벨 또는 수직 프로젝트의 시퀀스 스트림에 매우 적합합니다.
Datagrid 컨트롤은 목록 또는 라인 레이아웃을 사용해야합니다. Datalist와 유사 하게이 컨트롤은 스타일과 모양 속성을 제공합니다. DataGrid는 선택 및 편집 외에도 페이지 및 정렬과 같은 전체 프로젝트 모음에서 고급 작업을 지원합니다. DataGrid와 Datalist의 주요 차이점 중 하나는 Datagrid에 템플릿 속성, 즉 Datagrid 컨트롤의 프로젝트 또는 비자기가 포함되어 있지 않다는 것입니다. 그러나 DataGrid에 TemplateColumn을 추가하여 특정 열의 템플릿을 사용하십시오.
다음 표는 목록 바인딩 컨트롤에서 제공하는 함수의 요약입니다.
기능 반복자 Datalist Datagrid
템플릿은 (필수) 또는 (필수) 열 (선택 사항)입니다.
목록 레이아웃입니까?
스트림 레이아웃입니다
배포/신문 칼럼 스타일의 레이아웃입니까?
스타일과 모양 속성이 있는지 여부
예 있는지 여부를 선택하십시오
편집하다
삭제 되었습니까?
페이지 매김 없음
정렬 되었습니까?
관련 리소스
Microsoft .NET Framework SDK가 게시 한 QuickStart 예제를 사용하면 이러한 컨트롤의 몇 가지 예와 XML 및 웹 서비스를 사용한 데이터에 액세스하는 데이터를 설명하는 예제가있었습니다. SDK에 첨부 된 문서에는 ASP+ 페이지 프레임 워크 및 서버 컨트롤과 같은 관련 주제의 개념적 데이터 와이 프레임의 제어의 일부로 객체 모델의 참조 참고 문헌이 포함됩니다.