You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET中GridView从Cloud Firestore加载数据后分页重复问题排查

问题排查与解决方案

看起来你的GridView分页出现重复数据的核心问题出在全局列表ProName没有被重置,以及可能的Firestore查询顺序不稳定这两个点上,咱们一步步来解决:

1. 核心问题:全局列表累积数据导致分页混乱

你应该是把ProName声明为了页面的全局变量,每次调用LoadGridView()的时候,都会往这个列表里追加新数据,而不是重新加载最新的完整数据集。比如:

  • 第一次加载:ProName里有33条数据,GridView正常显示第1页(1-10条)
  • 点击分页到第4页时,再次调用LoadGridView(),又把33条数据追加进去,此时ProName里有66条数据
  • GridView的分页逻辑基于总数据量,第4页(索引3)会取第31-40条数据,而这部分刚好是第二次追加的前10条,也就是和第1页重复的内容

修复方案:每次加载前重置列表

把ProName改成LoadGridView()方法内的局部变量,或者在方法开头清空全局列表:

方案A:使用局部变量(推荐)

修改LoadGridView()方法,在内部创建新的列表,避免全局累积:

private async void LoadGridView()
{
    // 每次加载都创建新的列表,避免数据累积
    var ProName = new List<ProDetails>();
    Query qref = fstrore.Collection("User").Document(UID).Collection("Product");
    QuerySnapshot snap = await qref.GetSnapshotAsync();
    foreach (DocumentSnapshot pn in snap)
    {
        ProDetails pro = pn.ConvertTo<ProDetails>();
        ProName.Add(new ProDetails()
        {
            ProductName = pro.ProductName,
            ProductQuantity = pro.ProductQuantity,
            PricePerPiece = pro.PricePerPiece,
            ProductPacket = pro.ProductPacket,
            ProductDistributor = pro.ProductDistributor,
            ProductCategory = pro.ProductCategory,
            ProductExpiryDt = pro.ProductExpiryDt,
            ProductAddDt = pro.ProductAddDt.Date,
            ProductUpdateDt = pro.ProductUpdateDt.Date,
            ProductUpdateFlag = pro.ProductUpdateFlag
        });
    }
    GD1.DataSource = ProName;
    GD1.DataBind();
}

方案B:清空全局列表

如果必须保留全局ProName,在方法开头先清空:

private async void LoadGridView()
{
    ProName.Clear(); // 清空原有数据
    Query qref = fstrore.Collection("User").Document(UID).Collection("Product");
    // 后续代码不变...
}

2. 额外优化:给Firestore查询添加排序,保证数据顺序稳定

Firestore默认返回的文档顺序是不确定的(基于文档ID的内部排序),如果没有指定排序规则,每次拉取的数据顺序可能会有变化,也可能导致分页显示异常。建议给查询添加排序条件,比如按添加时间排序:

Query qref = fstrore.Collection("User").Document(UID).Collection("Product")
                    .OrderBy("ProductAddDt", Query.Direction.Descending); // 按添加时间倒序

3. 分页方法的小优化

你的分页逻辑本身没问题,但可以保留当前代码,核心问题解决后分页就会正常工作:

protected void GD1_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
    GD1.PageIndex = e.NewPageIndex;
    this.LoadGridView();
}

按照上面的步骤修改后,33条数据的分页应该会正常显示:第1-3页各10条,第4页显示最后3条,不会再出现重复第1页内容的问题。

内容的提问来源于stack exchange,提问作者Aditya Pote

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 17:40:17