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