2012-02-24 40 views
0

我有一個篩選器選擇頂部,搜索按鈕和ListView與自定義傳呼(女巫是一個Repeater女巫包含LinkBut​​tons頁碼)在底部的網頁。asp.net 3.5 ListView

當我選擇過濾器並單擊搜索按鈕時,我將結果放在列表<>和DataBinding它們在ListView。函數witch返回的結果有兩個屬性StartIndex和PageSize。所以當我點擊一個頁面時,我再次用新的PageIndex調用函數。有時結果需要ListView中的更多列。 所以我創建了兩個類(ResultsLayoutTemplate.cs,ResultsItemTemplate.cs)來設計ListView的佈局。

問題是,當我選擇一個頁面(ListView的自定義頁面),結果需要更多列到ListView時,表格的標題不會更改列並保留以前的頁面頁眉設計。行有正確的列。 例如在第一頁ListView有8列,第二頁ListView必須有13列。但它爲頭保留了8列。當第三頁需要8列時,也會發生同樣的情況。問題只在標題上。

這是代碼。

protected void ListView1_LayoutCreated(object sender, EventArgs e) 
{ 
    results = Session["results"] as List<Res>; 
    if (results.Count > 0) 
    { 
     Session["columns"] = results.Max(i => i.columns.Count); 
    } 

    ListView lv = sender as ListView; 
    ListView1.LayoutTemplate = new ResultsLayoutTemplate((int)Session["columns"]); 
    ListView1.ItemTemplate = new ResultsItemTemplate((int)Session["columns"]); 
    ListView1.AlternatingItemTemplate = new AlterResultsItemTemplate((int)Session["columns"]); 

    Control newlayoutContainer = new Control(); 
    lv.LayoutTemplate = new ResultsLayoutTemplate((int)Session["columns"]); 
    lv.LayoutTemplate.InstantiateIn(newlayoutContainer); 

    var usercontrol = newlayoutContainer.Controls[0]; 
    usercontrol.ID = "MyLayout"; 
    lv.Controls.Add(newlayoutContainer); 
} 

protected void Page_PreRender(object sender, EventArgs e) 
{ 
    int num; 
    bool isNum = Int32.TryParse(Session["page"].ToString(), out num); 

    if ((Int32.Parse(Session["page"].ToString()) > 0) && (isNum)) 
    { 
     results = Session["results"] as List<Res>; 
     Session["platos"] = results.Max(i => i.quadruplette.Count); 

     ListView1.Items.Clear(); 
     ListView1.ItemTemplate = new ResultsItemTemplate((int)Session["columns"]); 
     ListView1.AlternatingItemTemplate = new AlterResultsItemTemplate((int)Session["columns"]); 

     ListView1.DataSource = results; 
     ListView1.DataBind(); 
    } 
} 

protected void lbPage_Click(object sender, EventArgs e) 
{ 
    LinkButton btn = sender as LinkButton; 
    int num; 
    bool isNum = Int32.TryParse(btn.Text, out num); 
    if (isNum) 
    { 
     Session["page"] = btn.Text; 
    } 
    results = GetResults(Filters, (Int32.Parse(Session["page"].ToString()) - 1) * PageSize, PageSize); 

     Session["results"] = results; 
     Session["columns"] = results.Max(i => i.columns.Count); 
    } 
} 

回答

0

不是100%確定我明白這個問題,但它聽起來像你正試圖重新發明輪子。爲什麼不使用asp.net pagercontrol,只需定義佈局以適應您的需求。然後使用與您的篩選器控件綁定的WHERE子句的sqldatasource控件。然後將其綁定到列表視圖。然後在單擊go按鈕時重新綁定sqldatasource。在實際發生綁定之前需要執行的任何特殊操作都可能發生在選擇事件中。