如何排序一个网格视图列,其中有一个图像
本文关键字:图像 有一个 视图 一个 何排序 排序 网格 | 更新日期: 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>