我有一个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中对此进行排序的任何帮助。提前谢谢!
答案 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。这提供了很多 更多功能,允许您排序。但最好安排一个首先产生结果集的查询。