如何排序一个网格视图列,其中有一个图像

本文关键字:图像 有一个 视图 一个 何排序 排序 网格 | 更新日期: 2023-09-27 18:14:47

<asp:TemplateField HeaderText="Status" ItemStyle-Width="15%">
                                <ItemTemplate>
                                    <asp:Image ID="Status" runat="server" />
                                </ItemTemplate>
                            </asp:TemplateField>

我有这个列在我的网格视图和没有列作为状态在我的表,我做行绑定显示基于其他列的值的图像,

   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;
        }
    }

我如何排序状态列,其他列我有排序表达式作为列名,我排序它。但是对于这个有图片的列,我怎么排序呢

如何排序一个网格视图列,其中有一个图像

我通常已经有一个属性在我的对象从后端集,将保持"状态",然后你可以对它进行排序,仍然应用你的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;
    }
}

添加一个SortExpression到你的模板,命名另一个你可以排序的字段。

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