【问题标题】:Listview custom paging with datapager使用 datapager 的 Listview 自定义分页
【发布时间】:2012-05-13 19:41:45
【问题描述】:

谁能告诉我如何使用 datapager 实现自定义分页。现在我已经设法用 2 个按钮(用于下一页和上一页)和 LoadListview() 方法来做到这一点,但我想在 datapager 中使用这个方法。有什么建议吗?

文件隐藏代码:

SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["BusinessConnectionString"].ToString());
    SqlDataAdapter adap;
    int startIndex;

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            LoadListview();
        }         
    }

    private void LoadListview()
    {
        string FindWhat = Request.QueryString["Find"];
        string FindWhere = Request.QueryString["Where"];
        string TownName = FindWhere;
        string CountyName = FindWhere;
        string PostcodeName = FindWhere;

        //startIndex = int.Parse(ViewState["index"].ToString());
        startIndex = MyDataPager.StartRowIndex * MyDataPager.PageSize;
        int endIndex = startIndex + MyDataPager.PageSize;

        adap = new SqlDataAdapter("SELECT * FROM (SELECT ROW_NUMBER() OVER (ORDER BY id_Business) AS MyRow, id_Business, Name, TownName FROM UbeloView WHERE (Name Like '%" + FindWhat + "%' AND TownName Like '%" + TownName + "%') UNION ALL SELECT ROW_NUMBER() OVER (ORDER BY id_Business) AS MyRow, id_Business, Name, TownName FROM UbeloView WHERE (Name Like '%" + FindWhat + "%' AND CountyName Like '%" + CountyName + "%') UNION ALL SELECT ROW_NUMBER() OVER (ORDER BY id_Business) AS MyRow, id_Business, Name, TownName FROM UbeloView WHERE (Name Like '%" + FindWhat + "%' AND PostcodeName Like '%" + PostcodeName + "%')) AS log WHERE MyRow >=" + startIndex + " AND MyRow <=" + endIndex + " ", conn);

        DataSet ds = new DataSet();


        adap.Fill(ds);

        lstBusiness.DataSource = ds;
        lstBusiness.DataBind();
    }

    protected void MyDataPager_PreRender(object sender, EventArgs e)
    {
        LoadListview();
    }

【问题讨论】:

    标签: asp.net listview datapager


    【解决方案1】:

    这篇文章可以帮到你:http://www.codeproject.com/Articles/24065/Paging-ListView-With-DataPager

    在这篇文章中,作者使用了DataPager_PreRender将他的数据绑定到一个ListView:

    protected void DataPagerProducts_PreRender(object sender, EventArgs e)
    {
        ProductList db = new ProductList();
        this.ListViewProducts.DataSource = db.GellAll();
        this.ListViewProducts.DataBind();
    }
    

    您可以尝试类似的方法:

    protected void MyDataPager_PreRender(object sender, EventArgs e)
    {
        LoadListview();    
    }
    

    那么您需要做的就是修改您的LoadListview() 方法以从DataPager 控件本身获取开始索引。

    private void LoadListview()
        {
            string FindWhat = Request.QueryString["Find"];
            string FindWhere = Request.QueryString["Where"];
            string TownName = FindWhere;
            string CountyName = FindWhere;
            string PostcodeName = FindWhere;
    
            startIndex = MyDataPager.StartRowIndex * MyDataPager.PageSize;
            adap = new SqlDataAdapter("<Query removed to save space>", conn);
    
            DataSet ds = new DataSet();    
    
            adap.Fill(ds);
    
            lstBusiness.DataSource = ds;
            lstBusiness.DataBind();
        }
    

    如您所见,我通过获取行索引并将其乘以 DataPager 的页面大小来获得 startIndex。现在您只需将这部分 SQL 查询从 startIndex * 80 更改为 startIndex

    如果一切按计划进行,您将不需要 btnPreviousbtnNext 点击事件。

    我希望这能让您对自己想要实现的目标有所了解。

    【讨论】:

    • 谢谢你的回答,我早上试试这个。
    • 我尝试过这种方式,但仍然无法正常工作。它仅在 Datapager 中显示几页(最多为 4 页),如果我将页面大小从每页 80 条记录更改为 16 条或其他数量,则显示相同数量的页面。
    • @Oak:您可以编辑您的原始帖子并添加您现在使用的代码吗?
    • 感谢您帮助解决这个问题。我已经编辑并放置了代码的更改。基本上一切都一样,除了添加的 Prerender 事件和 startindex/endindex。我猜这些值有问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-06
    • 1970-01-01
    相关资源
    最近更新 更多