2012-03-19 59 views
0

我已经创建了一个真实充满了吉他的列表从数据库页面加载像这样一个ListView:排序在asp.net的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控件中存在的最新数据。意思是,如果在过滤之前点击排序,它应该对所有数据进行排序。如果在过滤后点击排序,它应该对过滤的数据进行排序。我使用下面的代码 ,这是在一个LinkBut​​ton触发点击

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中的最新数据是已排序的数据?

感谢

回答

0
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; 
} 

加载需要设置这个样子。访问/更新视图状态以及筛选和排序。

+0

嗯,我得到'对象引用没有设置为一个对象的实例“错误后,实现此代码,当我尝试过滤数据。 – 2012-03-19 18:19:56

+0

我的回答是更新 – Pankaj 2012-03-19 18:22:51

+0

它的工作!非常感谢: ) – 2012-03-19 20:15:06