在asp.net listview中对筛选的数据进行排序

在asp.net listview中对筛选的数据进行排序,asp.net,listview,sorting,Asp.net,Listview,Sorting,我创建了一个listview,其中包含了页面加载时数据库中的吉他列表,如下所示: protected void Page_Load(object sender, EventArgs e) { SqlConnection con = new SqlConnection(WebConfigurationManager.ConnectionStrings["GuitarsLTDBConnectionString"].ToString()); SqlCommand

我创建了一个listview,其中包含了页面加载时数据库中的吉他列表,如下所示:

protected void Page_Load(object sender, EventArgs e)
    {
        SqlConnection con = new SqlConnection(WebConfigurationManager.ConnectionStrings["GuitarsLTDBConnectionString"].ToString());
        SqlCommand cmd = new SqlCommand("SELECT * FROM Guitars", con);
        SqlDataAdapter da = new SqlDataAdapter(cmd.CommandText, con);
        DataTable dt = new DataTable();
        da.Fill(dt);
        lvGuitars.DataSource = dt;
        lvGuitars.DataBind();
    }
当用户选中与某个品牌对应的复选框时,下面的代码按该品牌过滤吉他列表

protected void chkOrgs_SelectedIndexChanged(object sender, EventArgs e)
    {
        DataTable dt = (DataTable)lvGuitars.DataSource;
        DataView dv = new DataView(dt);
        if (chkOrgs.SelectedValue == "Gibson")
        {
            dv.RowFilter = "Make = 'Gibson' OR Make='Fender'";
        }
        lvGuitars.DataSource = dv.ToTable();
        lvGuitars.DataBind();
    }
现在,我想做的是能够对listview中存在的最新数据进行排序。也就是说,如果在筛选之前单击了排序,则应该对所有数据进行排序。如果在过滤后单击“排序”,则应对过滤后的数据进行排序。我正在使用下面的 代码,单击链接按钮时触发

protected void lnkSortResults_Click(object sender, EventArgs e)
    {
        DataTable dt = (DataTable)lvGuitars.DataSource;
        DataView dv = new DataView(dt);
        dv.Sort = "Make ASC";
        lvGuitars.DataSource = dv.ToTable();
        lvGuitars.DataBind();
    }
问题在于,在对任何筛选进行排序之前加载listview的所有数据,而不是最新筛选的数据。如何更改此代码,以便listview中可用的最新数据是已排序的数据

谢谢


加载需要这样设置。在过滤和排序时访问/更新Viewstate。

Hmm,在实现此代码后,当我尝试过滤数据时,我得到一个“对象引用未设置为对象实例”错误。
if (!Page.IsPostBack)
{
    SqlConnection con = new SqlConnection(WebConfigurationManager.ConnectionStrings["GuitarsLTDBConnectionString"].ToString());
    SqlCommand cmd = new SqlCommand("SELECT * FROM Guitars", con);
    SqlDataAdapter da = new SqlDataAdapter(cmd.CommandText, con);
    DataTable dt = new DataTable();
    da.Fill(dt);
    lvGuitars.DataSource = dt;
    lvGuitars.DataBind();
    ViewState["dt"] = dt;
}