C# ASP.Net Gridview.Rows.Count提供了错误的计数

C# ASP.Net Gridview.Rows.Count提供了错误的计数,c#,asp.net,gridview,pagination,C#,Asp.net,Gridview,Pagination,我有一个默认分页的Gridview(BudgetGridView),每页30行。此gridview中的数据每年更新一次。为了实现这一点,我使用在线找到的一些非常流畅的代码()对gridview的所有行进行编辑。作为编辑过程的一部分,我禁用了分页功能,因此用户可以轻松地编辑和滚动整个gridview,直到他们触底并在一个操作中保存所有编辑。分页禁用发生在以下位置: if (myLabel == " Edit All ") { isEdit

我有一个默认分页的Gridview(BudgetGridView),每页30行。此gridview中的数据每年更新一次。为了实现这一点,我使用在线找到的一些非常流畅的代码()对gridview的所有行进行编辑。作为编辑过程的一部分,我禁用了分页功能,因此用户可以轻松地编辑和滚动整个gridview,直到他们触底并在一个操作中保存所有编辑。分页禁用发生在以下位置:

        if (myLabel == "  Edit All  ")
        {
            isEditMode = true;
            BudgetGridView.AllowPaging = false;
            EditAllButton.Text = "  Save Edits  ";
            BindBudgetGridView();
        }
此时gridview是完全可编辑的,它工作得很好。当用户点击上面代码的“else”进行保存时,我遇到了这个问题,这就是本文的主题。这是另外一个:

        else
        {
            isEditMode = false;
            EditAllButton.Text = "  Edit All  ";
            SaveData();  // Problem is here...
            BudgetGridView.AllowPaging = true;
            BindBudgetGridView();
        }
上面对SaveData()的调用如下所示:

protected void SaveData()
    {
        // total count for an update loop
        int totalRowsCount = BudgetGridView.Rows.Count;
它没有返回正确的计数(大约250行),而是给了我一个值30,这是分页值,但分页被禁用。如果有帮助,以下是gridview的属性:

                <asp:GridView 
                    ID="BudgetGridView" runat="server"
                    HeaderStyle-ForeColor="#FFFFFF" 
                    ShowFooter="True" 
                    HeaderStyle-BackColor="#546E96"
                    FooterStyle-BackColor="#C3CFDD" 
                    AllowPaging="True" 
                    PageSize="30" 
                    OnPageIndexChanging="BudgetGridView_PageIndexChanging"
                    AlternatingRowStyle-BackColor="#FFFFCC"  
                    AutoGenerateColumns="False" 
                    DataKeyNames="KeyID"   
                    BackColor="White"
                    HorizontalAlign="Center" 
                    OnRowDeleting="BudgetGridView_RowDeleting"
                    EnableViewState="false">

有没有想过为什么我的行数是30而不是250左右?

解决了

解决方案是在codebehind中处理分页,并将其从aspx中删除。只要它位于aspx中GridView的属性中,我在codebehind中所做的任何操作都不会产生任何效果。因此,我将aspx更改为:

                <asp:GridView 
                ID="BudgetGridView" runat="server"
                HeaderStyle-ForeColor="#FFFFFF" 
                ShowFooter="True" 
                HeaderStyle-BackColor="#546E96"
                FooterStyle-BackColor="#C3CFDD" 
                OnPageIndexChanging="BudgetGridView_PageIndexChanging"
                AlternatingRowStyle-BackColor="#FFFFCC"  
                AutoGenerateColumns="False" 
                DataKeyNames="KeyID"   
                BackColor="White"
                HorizontalAlign="Center" 
                OnRowDeleting="BudgetGridView_RowDeleting"
                EnableViewState="false">
现在,我们在用煤气做饭


感谢您的帮助。

您可能希望使用数据源中的“行数”而不是GridView。这听起来像是页面生命周期问题。您提到的if/else语句是在页面生命周期的什么时候发生的?Colin,如果我正确理解您的问题,则页面已完全加载,用户已检查数据并决定单击“全部编辑”按钮。这会将GridView项模板项更改为textfields。用户进行了编辑并单击了现在显示为“保存编辑”的同一按钮,这就带来了计数问题。此时,我们在上面If/Else的“Else”部分,并进入了SaveData部分。我可能得走那条路。然而,我只是头脑很清醒,想让这个GridView行计数工作起来。这就是我们拥有它的原因我真的需要努力克服这种顽固的心态。啊!!Dave和Colin,我确实使用了DB的计数(1041,远远超过200)来解决这个问题,有趣的是,在我的更新循环中,一旦它达到30(第31条记录以0开始),我就会得到一个索引超出范围异常,这向我表明它试图从Gridview的第31行获取数据,但相信页面上只有30条。我正在查看包含1041条记录的完整gridview。科林,你能详细介绍一下页面生命周期的概念吗?隐藏的代码确信gridview中只有30行。
            //kill pagination
        BudgetGridView.AllowPaging = false;
        BudgetGridView.PageSize = 5000;

        //resurrect pagination
        BudgetGridView.AllowPaging = true;
        BudgetGridView.PageSize = 30;