2011-11-14 6 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> 
関連する問題