在不返回SQL的情况下对GridView进行排序

时间:2015-04-16 20:13:01

标签: c# asp.net sorting gridview

我有一个gridview,我用它来显示storedProcedure的数据。我现在想要对数据进行排序,但很多地方都说我必须回到sql才能这样做。 Maby我不理解给出的解释,但我认为没错。我已经简化了问题,并希望有关如何对boundcolumn进行排序的任何帮助。这是我的aspx页面。

    <asp:GridView  ID="BannerGrid" runat="server" AllowSorting="True" onSorting="Sorts" GridLines="None" AutoGenerateColumns="false" OnRowCreated="BannerGrid_RowCreated">
        <Columns>
            <asp:Boundfield DataField="BannerID" HeaderText="Banner ID" SortExpression="BannerID"/> </Columns>

这是我后面的c#代码:

            SqlConnection sqlConnection1 = new SqlConnection(conn);
        SqlCommand cmd = new SqlCommand();
        cmd.CommandText = "GetDifferenceInteraction";
        cmd.CommandType = CommandType.StoredProcedure;
        cmd.Parameters.AddWithValue("@ADate", TodayDate);
        cmd.Parameters.AddWithValue("@BDate", YesDate);
        SqlDataReader reader;
        cmd.Connection = sqlConnection1;

        sqlConnection1.Open();

        reader = cmd.ExecuteReader();
        BannerGrid.DataSource = reader;
        BannerGrid.DataBind();
        reader.Close();
        sqlConnection1.Close();

有关如何在c#itelf中对此进行排序的任何帮助。提前谢谢!

2 个答案:

答案 0 :(得分:1)

您可以将数据存储在ViewState变量中,但如果数据非常大,则可能会导致问题。

...
reader = cmd.ExecuteReader();
//here you should save your data, I stored mine in a DataTable type like this
dtStored.Load(reader);
BannerGrid.DataSource = reader;
BannerGrid.DataBind();
reader.Close();
...

我有这四个属性

    private const string ASCENDING = " ASC";
    private const string DESCENDING = " DESC";
    private SortDirection gvSortDirection
    {
        get
        {
            if (ViewState["sortDirection"] == null)
                ViewState["sortDirection"] = SortDirection.Ascending;

            return (SortDirection)ViewState["sortDirection"];
        }
        set { ViewState["sortDirection"] = value; }
    }
    private DataTable dtStored
    {
        get { return (ViewState["dt"] == null) ? null : (DataTable)ViewState["dt"]; }
        set { ViewState["dt"] = value; }
    }
在你的排序活动中

你可以拥有这个

    protected void BannerGrid_Sorting(object sender, GridViewSortEventArgs e)
    {
        string sortExpression = e.SortExpression;
        string direction = ASCENDING;

        if (gvSortDirection == SortDirection.Ascending)
        {
            gvSortDirection = SortDirection.Descending;
            direction = DESCENDING;
        }
        else
        {
            gvSortDirection = SortDirection.Ascending;
            direction = ASCENDING;
        }
        try
        {   
            DataTable dt = dtStored;

            DataView dv = new DataView(dt);
            dv.Sort = sortExpression + direction;

            BannerGrid.DataSource = dv;
            BannerGrid.DataBind();     
        }
        catch (Exception ex)
        {
            //Log error
        }
    }

答案 1 :(得分:0)

如果我没记错的话,您可以做的是将数据加载到DataSet中的DataSet中。然后将它绑定到GridView。这提供了很多  更多功能,允许您排序。但最好安排一个首先产生结果集的查询。

相关问题