2010-04-30 2 views
1

바운드 데이터 값 IsObsolete를 기반으로 한 취소 선이있는 GridView의 행을 원합니다. 나는 이것을 시도했다 :바운드 데이터를 기반으로하는 GridView 스타일

<RowStyle BackColor="#EFF3FB" Font-Strikeout='<%# Bind('IsObsolete') %>' /> 

분명히 이것은 분석하지 않는다. GridView.DataBound()에서 이것을하지 않을 것입니다. 다른 아이디어?

+0

그리드 데이터 바인딩의 열이 동적으로 있습니까? – Myra

+0

@CAbbott : GridView에이 메소드가 없기 때문에'ItemDataBound'를 사용하는 것은 꽤 어려울 것입니다. :) –

+0

@Myra nope, SqlDataSource를 사용하는 데이터베이스에서. 그들이 있었다면, 이것은 더 쉬울 것입니다. –

답변

1

템플릿의 내 컨트롤 중 하나 인 DataBinding 이벤트에 스타일을 적용하면됩니다. 예 :이뿐만 아니라 데이터 바인딩에 따라 수정 된 도착 링크와 열이 그냥 빠른 예입니다

protected void hrefYourLink_DataBinding(object sender, System.EventArgs e) 
{    
    HyperLink link = (HyperLink)(sender); 
    GridViewRow row = (GridViewRow)(link.Parent.Parent); 
    if ((bool)(Eval("IsObsolete")) 
    { 
     row.CssClass = "StrikeThroughStyle"; 
    } 
    link.Text = HttpUtility.HtmlEncode(((int)(Eval("ID"))).ToString()); 
    link.NavigateUrl = string.Format(link.NavigateUrl, Eval("ID").ToString()); 
} 

하지만 당신은 얻을 수 있어야합니다 :

<asp:GridView ID="grdYourGrid" runat="server" AutoGenerateColumns="False"> 
    <Columns> 
     <asp:TemplateField HeaderText="SomeTitle"> 
      <ItemTemplate> 
       <asp:HyperLink ID="hrefYourLink" runat="server" 
        NavigateUrl="Somepage.aspx?id={0}" 
        OnDataBinding="hrefYourLink_DataBinding"></asp:HyperLink> 
      </ItemTemplate> 
     </asp:TemplateField> 
    </Columns> 
</asp:GridView> 

그런 다음 OnDataBinding 이벤트를 구현 귀하의 필요에 맞게 조정할 경우의 요지. 나는 aspx 코드에서 인라인으로 바인딩하지 않기 때문에 데이터 바인딩에서이 작업을 수행하는 것을 좋아한다.

+0

@Matthew Jones 당신은 이것을 알아 낸 적이 있습니까? 더 많은 도움이 필요하면 의견을 남기거나 질문을 편집하면 내가 할 수있는 것을 볼 수 있습니다. – Kelsey

0

RowStyle 요소가 전체 표에 적용되므로 원하는 결과를 얻는 유일한 방법은 모든 열에 대해 TemplateItems를 설정하고 동일한 데이터 값을 기반으로 각 열에 CssClass를 적용하는 것입니다.

이 작업을 수행하는 가장 간단한 방법은 DataBound 이벤트를 피하는 이유가 확실하지 않습니다.

또한 서식 지정 기능과 itemstyles를 사용해 볼 수도 있습니다. 위의 코드를 훔쳐서 변경 :

<% 

public string GetObsoleteClass(string obsolete) 
{ 
    bool obs = Convert.ToBoolean(obsolete); 
    obs ? return "myObsoleteClass" : return "myNotObsoleteClass"; 
} 

%> 
<asp:GridView ID="grdYourGrid" runat="server" AutoGenerateColumns="False"> 
    <Columns> 
     <asp:TemplateField HeaderText="SomeTitle"> 
      <ItemTemplate> 
       <asp:HyperLink ID="hrefYourLink" runat="server" 
        NavigateUrl="Somepage.aspx?id={0}" 
        OnDataBinding="hrefYourLink_DataBinding"></asp:HyperLink> 
      </ItemTemplate> 
       <itemstyle CssClass='<%# Eval("isObsolete") %>'> 
       </itemstyle> 
     </asp:TemplateField> 
     <asp:boundfield 
      sortexpression="LastName" 
      datafield="LastName" 
      headertext="LastName"> 
       <itemstyle CssClass='<%# Eval("isObsolete") %>'> 
       </itemstyle> 
     </asp:boundfield> 
    </Columns> 
</asp:GridView> 
+0

Css는 행 수준에서 설정할 수 있으며 무언가를 무 시하 지 않으면 개별적으로 각 항목에 설정할 필요가 없습니다. 또한 일반적으로 적어도 하나 이상의 이러한 정의 된 거의 모든 다른 DataBound 이벤트를 구현할 수 있으므로 항목 DataBinding 이벤트에서 할 첫 번째 항목을 DataBinding 이벤트에 추가하기가 쉽습니다. 또한 전체 행을 다른 색으로 채색하고 싶다면 내 방법이 잘 작동합니다. – Kelsey

+0

@Kelsey - 그게 그가하려고하는 것입니다 - 무언가를 무시하십시오. 나는이 이벤트를 사용하는 것이 선호되는 방법이라는 데 동의하지만, 그는 그 질문에서 그 이벤트를 사용하기를 원하지 않는다고 구체적으로 지적했다. –

관련 문제