【发布时间】:2023-03-25 02:53:02
【问题描述】:
我想按未绑定到任何数据库字段的模板列对我的 Gridview 行进行排序。这个模板库只有一个标签,我在代码中设置了它的文本,具体取决于数据绑定的不同列中的值。所以我坚持如何设置它的 sortExpression,因为它没有链接到列。
【问题讨论】:
我想按未绑定到任何数据库字段的模板列对我的 Gridview 行进行排序。这个模板库只有一个标签,我在代码中设置了它的文本,具体取决于数据绑定的不同列中的值。所以我坚持如何设置它的 sortExpression,因为它没有链接到列。
【问题讨论】:
您想要的行为是可能的。以下是您需要做的:
1) 订阅 GridView 的排序事件。
2) 将 SortExpression 添加到您的创建列,例如“MyOwnSortExpression”。
2) 在事件处理程序中,您可以通过 EventArgs 访问 SortExpression。 e.SortExpression
3) 创建一个在 GridView 上执行 DataBinding 的方法。
此方法有 2 个参数。第一个是应该排序的列的名称,第二个是排序方向。 (在单击同一列两次后切换排序方向会很好)
4) 添加仅在所需列上执行手动排序的代码开关。
示例:
protected void gv_Sorting(object sender, GridViewSortEventArgs e)
{
if(e.SortExpression == MyOwnSortExpression)
{
UpdateDataBinding(e.SortExpression, e.SortDirection);
e.Cancel = true;
return;
}
}
protected void UpdateDataBinding(String sortexpression, SortDirection direction)
{
switch(sortExpression)
{
case "MyOwnSortExpression":
var myData = GetYouSpecificDataFromDB();
if(direction == SortDirection.Ascending)
{
var = var.OrderBy(x => string.format("jkalsd{0}", x.TheSpecifiedDBColumn)) // or any desired linq expression);
}
else
{
var = var.OrderByDescending(x => string.format("jkalsd{0}", x.TheSpecifiedDBColumn)) // or any desired linq expression);
}
this.gv.DataSource = var.ToList();
this.gv.DataBind();
break;
}
}
您可以为排序方向和排序列添加缓存以启用切换机制。
您的解决方案可能会有所不同,具体取决于您正在执行的数据绑定类型(Linq-to-Sql、ObjectDataSource...)
这个链接http://blogs.sftsrc.com/stuart/archive/2009/02/19/130.aspx 也提供了一个不错的类。如果您可以创建一个包含所有要显示的值的 Wrapperclass,则效果最好。我建议的解决方案不需要包装类,但缺乏灵活性。
【讨论】: