按标签控件ID列出ListView排序列

时间:2017-02-09 16:16:34

标签: c# asp.net listview

我试图通过控件内容对ListView列进行排序 - 在本例中为Label,而不是在SQL本身内。这是因为后面的C#代码计算显示LV ItemTemplate列中的文本。

控件内容是日期显示值(英国短日期格式)。

所以在代码方面,如果标签是:

<asp:Label runat="server" ID="lbDateSort" Text='<%# CalculateDate() %>' />

我希望ListView(我对LV DataBound的危险猜测)默认情况下,按照Label示例中的结果值进行排序。

我希望这是有道理的,但很高兴进一步澄清。谢谢你们。

1 个答案:

答案 0 :(得分:0)

我建议在将数据绑定到ListView之前执行CalculateDate()逻辑和排序。例如:

我们假设您需要根据订单日期计算商品的交货日期。

<asp:ListView ID="ListView1" runat="server">
    <ItemTemplate>
        Item Name: <asp:Label ID="lblItemName" runat="server" Text='<%# Eval("ItemName") %>' /></br>
        Order Date: <asp:Label ID="lblOrderDate" runat="server" Text='<%# Eval("OrderDate") %>' /></br>
        Delivery Date: <asp:Label ID="lblDeliveryDate" runat="server" Text='<%# Eval("DeliveryDate") %>' /></br>
        </br>
    </ItemTemplate>
</asp:ListView>

后面的代码调用CalculateDeliveryDate(DateTime orderDate)方法来确定交付日期并更新集合。在将数据源分配给ListView时,您可以按照您想要的方式对集合进行排序。

public partial class ListViewExample : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        var data = new List<ListModel>
        {
            new ListModel { ItemName = "Phone", OrderDate = new DateTime(2017,1,12) },
            new ListModel { ItemName = "Book", OrderDate = new DateTime(2017,1,1) },
            new ListModel { ItemName = "Desk", OrderDate = new DateTime(2017,3,12) }
        };

        data.ForEach(x => x.DeliveryDate = CalculateDeliveryDate(x.OrderDate));

        ListView1.DataSource = data.OrderBy(x => x.DeliveryDate);
        ListView1.DataBind();
    }

    private DateTime CalculateDeliveryDate(DateTime orderDate)
    {
        return orderDate.AddDays(7);
    }
}

public class ListModel
{
    public string ItemName { get; set; }
    public DateTime OrderDate { get; set; }
    public DateTime DeliveryDate { get; set; }
}

您的结果将如下所示

项目名称:预订

订单日期:1/1/2017 12:00:00 AM

交货日期:1/8/2017 12:00:00 AM

-

项目名称:电话

订单日期:1/12/2017 12:00:00 AM

交货日期:1/19/2017 12:00:00 AM

-

商品名称:服务台

订单日期:3/12/2017 12:00:00 AM

交货日期:3/19/2017 12:00:00 AM