在ASP.NET中对GridView列进行排序

18 浏览
0 Comments

在ASP.NET中对GridView列进行排序

我有一个从数据库加载数据的GridView。数据首次显示在GridView中,按照日期时间排序。我想在其中的一列上允许排序,例如在main_post列上。我尝试过这种方法,但是当我点击列头时,GridView仍然没有排序。

这是我GridView的前端代码:

AllowPaging="True"

AllowSorting="True"

OnSorting="ComponentGridView_Sorting">

SortExpression="ComponentGridView_Sorting" />

我的后端代码:

protected void loadData()
{
    DataTable dtTemp;
    dtTemp = objDBInterface.getResults(strSQL);
    Datagrid1.DataSource = dtTemp;
    Datagrid1.DataBind();
    ViewState["dtbl"] = dtTemp;
}
protected void ComponentGridView_Sorting(object sender, GridViewSortEventArgs e)
    {
        DataTable dataTable = ViewState["dtbl"] as DataTable;
        if (dataTable != null)
        {
            DataView dataView = new DataView(dataTable);
            dataView.Sort = e.SortExpression + " " + ConvertSortDirection(e.SortDirection);
            Datagrid1.DataSource = dataView;
            Datagrid1.DataBind();
        }
    }
    private string ConvertSortDirection(SortDirection sortDirection)
    {
        string newSortDirection = String.Empty;
        switch (sortDirection)
        {
            case SortDirection.Ascending:
                newSortDirection = "ASC";
                break;
            case SortDirection.Descending:
                newSortDirection = "DESC";
                break;
        }
        return newSortDirection;
    }

我没有任何错误,但我不知道我的错误在哪里,请有人帮我解决这个问题吗?

提前谢谢。

0
0 Comments

在ASP.NET中,GridView是一个常用的控件,用于显示和编辑数据。在GridView中,如果需要对列进行排序,可以通过设置Allowsorting属性为true,并在代码文件中添加排序事件来实现。

首先,在GridView的标记中设置Allowsorting属性为true,允许排序操作。代码如下:

接下来,在代码文件中添加排序事件GridView1_Sorting。代码如下:

protected void GridView1_Sorting(object sender, GridViewSortEventArgs e)
{ 
    SetSortDirection(SortDireaction);
    if (dataTable != null)
    {
       dataTable.DefaultView.Sort = e.SortExpression + " " +_sortDirection;
        GridView1.DataSource = dataTable;
        GridView1.DataBind();
        SortDireaction = _sortDirection;
    }
} 
protected void SetSortDirection(string sortDirection)
{
    if (sortDirection == "ASC")
    {
        _sortDirection = "DESC";
    }
    else
    {
        _sortDirection = "ASC";
    }
}

在排序事件中,首先调用SetSortDirection方法来设置排序方向。然后,检查数据源是否为空,如果不为空,则通过Sort方法对数据进行排序,并将排序后的数据重新绑定到GridView上。最后,更新排序方向变量。

通过以上步骤,即可实现在ASP.NET中对GridView列进行排序的功能。

0
0 Comments

在ASP.NET中,当我们尝试对GridView的列进行排序时,可能会遇到问题。下面是一种解决此问题的方法:

首先,在aspx页面中将OnSorting="ComponentGridView_Sorting"改为onsortcommand="ComponentGridView_Sorting"

然后,在aspx.cs(后端代码)中添加以下代码:

protected void Datagrid1_SortCommand(object source, DataGridSortCommandEventArgs e)
{
    string strSQL;
    DataTable dt;
    strSQL = "YOUR SELECT STATEMENT (SQL)";
    dt = strSQL;
    {
        string SortDir = string.Empty;
        if (dir == SortDirection.Ascending)
        {
            dir = SortDirection.Descending;
            SortDir = "Desc";
        }
        else
        {
            dir = SortDirection.Ascending;
            SortDir = "Asc";
        }
        DataView sortedView = new DataView(dt);
        sortedView.Sort = e.SortExpression + " " + SortDir;
        Datagrid1.DataSource = sortedView;
        Datagrid1.DataBind();
    }
}
protected SortDirection dir
{
    get
    {
        if (ViewState["dirState"] == null)
        {
            ViewState["dirState"] = SortDirection.Ascending;
        }
        return (SortDirection)ViewState["dirState"];
    }
    set
    {
        ViewState["dirState"] = value;
    }
}

这段代码会在点击列标题进行排序时被触发。首先,它会获取选择的SQL语句并将结果存储在DataTable dt中。然后,它会检查当前排序方向,并根据需要更改排序方向。接下来,它会创建一个DataView对象,并根据排序表达式和排序方向对数据进行排序。最后,将排序后的数据源绑定到GridView上,并重新绑定数据。

通过这种方式,我们可以解决在ASP.NET中对GridView列进行排序时可能遇到的问题。希望这对其他遇到类似问题的人有所帮助。

0