如何对具有图像的网格视图列进行排序
Posted
技术标签:
【中文标题】如何对具有图像的网格视图列进行排序【英文标题】:How to sort a grid view column which has a image 【发布时间】:2011-12-28 16:00:51 【问题描述】:<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";
行数据绑定:
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;
【讨论】:
您的意思是为图像设置一个值吗?当我尝试将排序表达式添加为状态并尝试排序时,我得到的错误是未找到状态列 用示例实现更新了答案。【参考方案2】:在您的模板中添加一个SortExpression,以命名您可以排序的另一个字段。
<asp:TemplateField HeaderText="Status" SortExpression="SomeOtherColumn">
<ItemTemplate>
<asp:Image ID="Status" runat="server" />
</ItemTemplate>
</asp:TemplateField>
【讨论】:
以上是关于如何对具有图像的网格视图列进行排序的主要内容,如果未能解决你的问题,请参考以下文章