私は、上部にあるフィルタ選択、検索ボタン、およびカスタムページャ(リストはページ番号のLinkButtonを含む魔法使い)を持つリストビューを持つWebページを持っています。asp.net 3.5 ListView
フィルタを選択して検索ボタンをクリックすると、リスト<>に結果が格納され、ListViewにデータがバインドされます。関数witchが返す結果には、StartIndexとPageSizeの2つのプロパティがあります。ページをクリックすると、新しいPageIndexで関数が呼び出されます。場合によっては、結果にListViewの列が必要になることがあります。 したがって、ListViewのレイアウトを設計する2つのクラス(ResultsLayoutTemplate.cs、ResultsItemTemplate.cs)を作成します。
問題は、ListViewのカスタムページャを選択したときに結果がListViewに多くの列が必要な場合です。テーブルのヘッダーは列を変更せず、前のページヘッダーのデザインを保持します。行には右の列があります。 たとえば、最初のページのListViewには8列あり、2番目のページにはListViewに13列が必要です。しかし、それはヘッダーのために8列を保持します。第3ページに8列が必要な場合も、前のページの13になります。問題はヘッダーにのみあります。
ここにコードがあります。
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);
}
}