2012-03-19 48 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