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
相关产品推荐
相关产品推荐

