2011-11-14 2 views
3
<asp:TemplateField HeaderText="Status" ItemStyle-Width="15%"> 
           <ItemTemplate> 
            <asp:Image ID="Status" runat="server" /> 
           </ItemTemplate> 
          </asp:TemplateField> 

이 표가 그리드보기에 있고 테이블의 상태가 열이 아닌데, 다른 열의 값을 기반으로 이미지를 표시하기 위해 rowdatabound를 수행합니다. 나는 상태 열을 정렬하려면 어떻게이미지가있는 그리드 뷰 열을 정렬하는 방법

protected void MyGrid_RowDataBound(object sender, GridViewRowEventArgs e) 
    { 
     if (e.Row.RowType == DataControlRowType.DataRow) 
     { 
      Image img = (Image)e.Row.FindControl("Status"); 
      DateTime received; 
      DateTime read; 
      DateTime.TryParse(Convert.ToString(DataBinder.Eval(e.Row.DataItem, "TimeReceived")), out received); 
      DateTime.TryParse(Convert.ToString(DataBinder.Eval(e.Row.DataItem, "TimeRead")), out read); 
      if (received == DateTime.MinValue) 
      { 
       img.ImageUrl = "Styles/Images/red.png"; 
       img.ToolTip = "Message Not Received"; 
      } 
      else (read == DateTime.MinValue) 
      { 
       img.ImageUrl = "Styles/Images/amber.png"; 
       img.ToolTip = "Message Received"; 
      } 
          img.Visible = true; 
     } 
    } 

는 다른 열이 나는 열 이름과 같은 종류의 표현을하고 난 그것을 분류하고 있습니다. 그러나 이미지가있는이 칼럼에서는 어떻게 정렬 할 수 있습니까?

답변

1

정상적으로 "상태"를 보유 할 백엔드 세트의 객체에 대한 속성이 이미 있습니다. 그런 다음 정렬하여 UI 로직을 적용 할 수 있습니다. 비즈니스 계층

<asp:TemplateField HeaderText="Status" SortExpression="MessageStatus"> 
    <ItemTemplate> 
     <asp:Image ID="Status" runat="server" /> 
    </ItemTemplate> 
</asp:TemplateField> 


public YourObject 
{ 
    public string MessageStatus {get; set;} 
    .......... 
} 

넣어 로직 쿼리 전화 :

//call db 
//fill object 
    //while filling object 
    DateTime received = this.TimeReceived 
    DateTime read = this.TimeRead   
    if (received == DateTime.MinValue) 
    { 
     MessageStatus = "Message Not Received"; 
    } 
    else (read == DateTime.MinValue) 
    { 
     MessageStatus = "Message Received"; 
    } 

RowDataBound :

protected void MyGrid_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    if (e.Row.RowType == DataControlRowType.DataRow) 
    { 
     Image img = (Image)e.Row.FindControl("Status"); 

     string messsageStatus = DataBinder.Eval(e.Row.DataItem, "MessageStatus") as string; 

     if (messsageStatus == "Message Not Received") 
     { 
      img.ImageUrl = "Styles/Images/red.png"; 
      img.ToolTip = messsageStatus ; 
     } 
     else if (messsageStatus == "Message Received") 
     { 
      img.ImageUrl = "Styles/Images/amber.png"; 
      img.ToolTip = messsageStatus ; 
     } 
     img.Visible = true; 
    } 
} 
+0

이미지의 값을 설정 하시겠습니까? 정렬 식을 상태로 추가하고 정렬하려고하면 상태 열을 찾을 수 없습니다. – Mark

+0

예제 구현으로 응답을 업데이트했습니다. –

0

이 템플릿의 이름을 다른 필드를 SortExpression 추가를 당신을 정렬 할 수 있습니다.

<asp:TemplateField HeaderText="Status" SortExpression="SomeOtherColumn"> 
    <ItemTemplate> 
     <asp:Image ID="Status" runat="server" /> 
    </ItemTemplate> 
</asp:TemplateField> 
관련 문제