当前位置:  开发笔记 > 编程语言 > 正文

如果使用自定义DataSource,如何对ASP.NET GridView中的列进行排序?

如何解决《如果使用自定义DataSource,如何对ASP.NETGridView中的列进行排序?》经验,为你挑选了1个好方法。

当我使用自定义SqlDataSource时,我无法使用GridView使用户能够对数据列进行排序.

我有一个GridView,其中HTML中引用它的代码是最小的:



在代码隐藏中,我附加了一个动态创建的SqlDataSource(它包含的列并不总是相同,因此用于创建它的SQL是在运行时构造的).例如:

我设置了专栏......

BoundField column = new BoundField();
column.DataField = columnName;
column.HeaderText = "Heading";
column.SortExpression = columnName;

grid.Columns.Add(column);

数据源......

SqlDataSource dataSource = new SqlDataSource(
    "System.Data.SqlClient",
    connectionString, 
    generatedSelectCommand);

那么gridview ......

grid.DataSource = dataSource;
grid.DataKeyNames = mylistOfKeys;
grid.DataBind();

当我希望它对列数据进行排序时,当用户点击列标题时,没有任何反应.任何想法,我缺少什么?

如果有一个更好的方式这样做也会有所帮助,因为这看起来很混乱!



1> 小智..:

您还可以在Sorting处理程序中的DataBind()调用之前重新分配datasource.SelectCommand.像这样的东西:

protected void gvItems_Sorting(object sender, GridViewSortEventArgs e)
{
    GridView gv = (GridView)sender;
    SqlDataSource ds = (SqlDataSource)gv.DataSource;
    ds.SelectCommand = ds.SelectCommand + " order by " 
        + e.SortExpression + " " + GetSortDirection(e.SortDirection);
    gvItems.DataSource = ds;
    gvItems.DataBind();
}

string GetSortDirection(string sSortDirCmd)
{
    string sSortDir;
    if ((SortDirection.Ascending == sSortDirCmd))
    {
        sSortDir = "asc";
    }
    else
    {
        sSortDir = "desc";
    }
    return sSortDir;
}

我希望这有帮助.如果您需要额外的帮助来实现它,请告诉我.

请享用!

推荐阅读
手机用户2502852037
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有