在asp.net listview中对筛选的数据进行排序
我创建了一个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
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;
}