【发布时间】:2015-05-23 00:55:23
【问题描述】:
我有一个默认分页的 Gridview (BudgetGridView),每页 30 行。每年一次,此网格视图中的数据会更新一次。为了实现这一点,我正在使用我在网上找到的一些非常漂亮的代码 (http://highoncoding.com/) 来编辑这个 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 左右?
【问题讨论】:
-
您可能希望使用数据源中的“行数”而不是 GridView。
-
这听起来像是页面生命周期问题。您提到的 if/else 语句在页面生命周期的哪个阶段发生?
-
Colin,如果我正确理解了您的问题,页面已完全加载,用户已检查数据并决定单击“全部编辑”按钮。这会将 GridView ItemTemplate 项更改为文本字段。用户进行了编辑并单击了现在显示“保存编辑”的相同按钮,这将我们带到了计数问题。此时我们处于上述 If/Else 的“Else”中,并已移至 SaveData 部分。
-
戴夫,我也有同样的想法。我可能不得不走那条路。然而,我只是头脑清醒,想让这个 GridView 行计数工作。这就是我们拥有它的原因。 ;-) 我真的需要努力解决这种顽固的问题。
-
呸!!戴夫和科林,我确实使用数据库中的计数(1041,超过 200)来解决这个问题,有趣的是,在我的更新循环中,一旦它达到 30(从 0 开始的第 31 条记录),我得到一个超出范围的索引异常,这表明它正在尝试从 Gridview 的第 31 行获取数据,但认为页面上只有 30 个。我正在查看包含 1041 条记录的完整网格视图。 Colin,你能详细说明一下页面生命周期的概念吗?后台代码确信 gridview 中只有 30 行。
标签: c# asp.net gridview pagination