【问题标题】:asp.net 3.5 ListViewasp.net 3.5 列表视图
【发布时间】:2012-02-24 13:42:54
【问题描述】:

我有一个顶部带有过滤器选择的网页、一个搜索按钮和一个底部带有自定义寻呼机的 ListView(女巫是一个中继器女巫,其中包含带有页码的 LinkBut​​tons)。

当我选择过滤器并单击搜索按钮时,我将结果放入 List 并在 ListView 中对它们进行数据绑定。返回结果的函数有两个属性,分别是 StartIndex 和 PageSize。因此,当我单击一个页面时,我会再次使用新的 PageIndex 调用该函数。有时结果需要来自 ListView 的更多列。 所以我创建了两个类(ResultsLayoutTemplate.cs、ResultsItemTemplate.cs)来设计ListView的布局。

问题是当我选择一个页面(ListView 的自定义分页器)时,结果需要更多列到 ListView,表的标题不会更改列并保持前一页标题设计。行有正确的列。 例如,第一页 ListView 有 8 列,第二页 ListView 必须有 13 列。但它为标题保留了 8 列。当第三页需要 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);
    }
}

【问题讨论】:

    标签: asp.net listview


    【解决方案1】:

    不是 100% 确定我理解这个问题,但听起来你正在尝试重新发明轮子。为什么不使用 asp.net pagercontrol 并定义布局以适合您的需要。然后使用带有 WHERE 子句的 sqldatasource 控件绑定到您的筛选器控件。然后将其绑定到列表视图。然后在单击 go 按钮时重新绑定 sqldatasource。在绑定实际发生之前需要执行的任何特殊操作都可能发生在 Selecting 事件中。

    【讨论】:

      猜你喜欢
      • 2010-09-27
      • 1970-01-01
      • 2010-10-27
      • 2010-10-23
      • 2012-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多