【问题标题】: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;
        }
    }

我如何对状态列进行排序,其他列我有排序表达式作为列名,我正在对其进行排序。但是对于这个带有图片的专栏,我该如何进行排序。

【问题讨论】:

    标签: c# asp.net sorting gridview datagrid


    【解决方案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>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-04-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-25
      • 1970-01-01
      相关资源
      最近更新 更多