我试图通过控件内容对ListView列进行排序 - 在本例中为Label,而不是在SQL本身内。这是因为后面的C#代码计算显示LV ItemTemplate列中的文本。
控件内容是日期显示值(英国短日期格式)。
所以在代码方面,如果标签是:
<asp:Label runat="server" ID="lbDateSort" Text='<%# CalculateDate() %>' />
我希望ListView(我对LV DataBound的危险猜测)默认情况下,按照Label示例中的结果值进行排序。
我希望这是有道理的,但很高兴进一步澄清。谢谢你们。
答案 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