GridView의 행에 CSS를 선택적으로 적용하십시오
문제
나는 CSS 클래스를 개별 행에 선택적으로 적용 할 수있는 방법을 찾고 있습니다. GridView
데이터 바인딩 항목의 속성을 기반으로합니다.
예 :
GridView의 데이터 소스는 일반적인 목록입니다 SummaryItems
그리고 SummaryItem
속성이 있습니다 ShouldHighlight
. 언제 ShouldHighlight == true
관련 행의 CSS는 highlighted
어떤 아이디어?
해결책
아주 쉽게
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
DataRowView drv = e.Row.DataItem as DataRowView;
if (drv["ShouldHighlight"].ToString().ToLower() == "true")
e.Row.CssClass = "highlighted";
}
}
위의 코드는 a를 사용하는 경우 작동합니다 DataTable으로 데이터 소스로
로 변경:
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
myClass drv = (myClass)e.Row.DataItem;
if (drv.ShouldHighlight)
e.Row.CssClass = "highlighted";
}
}
제네릭을 사용할 때 위의 예제 :
public class myClass
{
public Boolean ShouldHighlight
{ get; set; }
}
당신이 함께 일하는 경우 제네릭 (목록, 사전 등)
명심하십시오 :
e.Row.dataItem
항상 행을 채우고있는 전체 객체를 반환하므로 여기에서 웹 페이지에서 데이터의 모양을 조작하기가 쉽습니다.
데이터가 행 객체에 첨부 된 후 트리거되는 RowDatabound 이벤트를 사용해야하지만 아직 페이지에 HTML 코드를 작성하지 않은 경우,이 방법으로는 thinthighlight 값을 확인할 수 있습니다 (나는 문자열로 변환 했으므로 유형을 모릅니다. , 부울 가치라는 것을 알면 변경할 수 있습니다).
이 코드는 megakemp 코드보다 훨씬 빠르게 실행됩니다. 왜냐하면 목록 객체를 생성하지 않고 각 행의 전체 데이터 소스로 채워져 있습니다 ...
추신 a 이 웹 사이트를보십시오, GridView 객체를 사용하여 프로젝트에 대한 여러 자습서를 찾을 수 있습니다.
다른 팁
명심하고 싶은 한 가지는 RowCreated 또는 RowDatabound 이벤트 핸들러에서 row.cssclass 속성을 설정하는 것입니다. GridView는 다음과 같은 속성을 통해 행 스타일에 쉽게 액세스 할 수 있습니다.
gvGrid.AlternatingRowStyle.CssClass = ALTROW_CSSCLASS
gvGrid.RowStyle.CssClass = ROW_CSSCLASS
그러나 CSSCLASS 값을 특정 행에 할당 할 때이 경우에 필요한 것처럼 할당은 그리드 레벨에서 최상위 할당을 오버 트립합니다. 과제는 우리가 원하는대로 "캐스케이드"가 아닙니다. 따라서 최상위 클래스 할당을 보존하고 더 구체적으로 자신의 레이어를 보존하려면 Rowstate를 확인하려면 클래스 이름을 확인하고 그에 따라 클래스 이름을 확인해야합니다.
If(item.ShouldHighlight)
{
If(e.Row.RowState == DataControlRowState.Alternate)
{
e.Row.CssClass = String.Format("{0} {1}", "highlight", ALTROW_CSSCLASS)
}
else
{
e.Row.CssClass = String.Format("{0} {1}", "highlight", ROW_CSSCLASS)
}
}