任何人都可以告诉函数在c#asp.net中对gridview的列进行排序。
数据绑定到gridview来自使用linq创建的datacontext。我想单击列的标题来对数据进行排序。
谢谢!
答案 0 :(得分:9)
要做到这一点,你需要做两件事。
手动处理网格中的排序事件,并使用我编写的帮助程序按SortExpression和SortDirection排序:
public static IQueryable<T> SortBy<T>(IQueryable<T> source, string sortExpression, SortDirection direction) {
if (source == null) {
throw new ArgumentNullException("source");
}
string methodName = "OrderBy";
if (direction == SortDirection.Descending) {
methodName += "Descending";
}
var paramExp = Expression.Parameter(typeof(T), String.Empty);
var propExp = Expression.PropertyOrField(paramExp, sortExpression);
// p => p.sortExpression
var sortLambda = Expression.Lambda(propExp, paramExp);
var methodCallExp = Expression.Call(
typeof(Queryable),
methodName,
new[] { typeof(T), propExp.Type },
source.Expression,
Expression.Quote(sortLambda)
);
return (IQueryable<T>)source.Provider.CreateQuery(methodCallExp);
}
db.Products.SortBy(e.SortExpression,e.SortDirection)
查看my blog post 如何执行此操作:
答案 1 :(得分:2)
答案 2 :(得分:0)
有关在网格视图中排序的更多信息可以在这里找到:MSDN Gridview sorting用于获取数据的方法无关紧要,您可以使用相同的排序。
答案 3 :(得分:0)
添加:
AllowSorting="true"
到<asp:GridView />
标记,应该这样做
答案 4 :(得分:0)
当我单独这样做时,它会出错 “GridView'GridView1'发起了事件 排序未处理。
我之前已经发生了这种情况......我刚刚创建了一个一次性处理程序,然后一切似乎都开始了。不是最漂亮的解决方案,但它对我有用。
也就是说,我没有在GridView代码中看到任何对数据源的引用。你需要这样的东西:
<asp:LinqDataSource ID="dsMyDataSource" runat="server"
DataContextTypeName="MyDataContext"
TableName="MyTable"
AllowSort="true" />
然后在你的GridView中:
<asp:GridView ID="gvMyGridView" runat="server" DataSourceID="dsMyDataSource" ... />
答案 5 :(得分:0)
在“属性”面板中双击“排序条目”。 将创建一个新函数。 在此函数中编写代码以填充Gridview。 唯一的区别是基于GridViewSortEventArgs e
更改查询 e.SortExpression
和
e.SortDirection总是升序:-(
我希望这个简短的答案有帮助
答案 6 :(得分:0)
SQL查询的半伪代码
string Query= string.Empty;
string SortExpression = string.Empty;
// HDFSort is an HiddenField !!!
protected void SortCommand_OnClick(object sender, GridViewSortEventArgs e)
{
SortExpression = e.SortExpression;
Query = YourQuery + " ORDER BY "+SortExpression +" "+ HDFSort.Value ;
HDFSort.Value = HDFSort.Value== "ASC" ? "DESC" : "ASC";
RefreshGridView();
}
protected void RefreshGridView()
{
GridView1.DataSource = DBObject.GetData(Query);
GridView1.DataBind();
}