相關的知識點
1.ViewState存儲List類數據
2 Gridview自帶sorting方法
3. 獲取List類的屬性
4.Linq的排序方法
1、在源碼中給GridView中加入AllowSorting屬性 和在列中加入SortExpression屬性(注意必須與List的屬性聲明一致且區別大小寫)
<asp:GridView ID="GridView1" runat="server" AllowSorting="true" OnSorting="GvList1_Sorting" >
<Columns>
<asp:BoundField DataField="SortID" HeaderText="序號" SortExpression="SortID">
<FooterStyle Wrap="false" />
<HeaderStyle Wrap="false" />
<ItemStyle Wrap="false" />
</asp:BoundField>
</Columns>
</asp:GridView>
2. 在後臺代碼中相對應的事件
protected void GvList1_Sorting(object sender, GridViewSortEventArgs e)
{
string sortExpression = e.SortExpression;
List<ls> Gv1ist = ViewState["Gv1ist"] as List<ls>;
//如果當前是升序排列則改成降序
if (ViewState["sort"].ToString() == "ASC")
{
Gv1ist = Gv1ist.OrderBy(s => GetPropertyValue(s, sortExpression)).ToList<ls>();
ViewState["sort"] = "DESC";
}
else //如果當前是降序排列則改成升序
{
Gv1ist = Gv1ist.OrderByDescending(s => GetPropertyValue(s, sortExpression)).ToList<ls>();
ViewState["sort"] = "ASC";
}
if (GvOne1ist.Count > 0)
{
GridView1.DataSource = GvOne1ist;
GridView1.DataBind();
}
}
/// <summary>
/// 根據屬性的字符串形式找到屬性的元數據信息
/// </summary>
/// <param name="obj">類名稱</param>
/// <param name="property">列名</param>
/// <returns></returns>
public object GetPropertyValue(object obj, string property)
{
System.Reflection.PropertyInfo propertyInfo = obj.GetType().GetProperty(property);
return propertyInfo.GetValue(obj, null);
}
3.後臺的頁面開始位置初始化排序方向
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
ViewState["sort"] = "ASC";
}
}
//查詢按鈕的事件
protected void btnQuery_Click(object sender, EventArgs e)
{
IList< ls> Gv1ist = getData();//自定義獲取ls類的方法
///注意IList類要存儲到ViewState中必須先序列化
ViewState["GvTwo1ist"] = Gv1ist;
}