迭代启用分页的GridView控件中的所有元素,并一次保存所有元素

时间:2018-12-05 18:14:12

标签: asp.net vb.net gridview

我在显示元素列表的页面上有一个<asp:GridView>控件。我已启用控件AllowPaging="True"的分页。有用于列属性的TextBoxes,其他详细信息是只读的。我想在所有元素文本字段中进行更改,并希望根据条件一次保存所有内容。

现在,我的问题是由于启用了页面调度,当我单击任意页面上的保存更改时,List.Rows仅返回当前页面上的元素,而不返回所有页面上的元素。我发现的另一个问题是,如果我在第一页上进行更改,然后转到第二页并进行更改并进入第一页,则所做的更改都将消失,因此即使我的第一个问题也可能得到解决,它仍将作为问题保留。谁能提出建议进行哪些更改以使此方案起作用?

下面是示例代码,以供参考。 ASPX:

<asp:GridView Id="foo" runat="server" AllowPaging="True" DataSourceID="bar">
.
.
    <Columns>
    .
    .
        <asp:TemplateField>
            <ItemTemplate>
                <asp:TextBox /> //This is editable and I need to save all items at once
                .
                .
                .
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
.
.
<asp:GridView>
.
.
<asp:objectdatasource ID="bar" .... />
<asp:Button ID="savechanges" . . . . />

VB

Protected Sub savechanges_Click(....)
.
.
    For Each element in foo.Rows  //Here I get only current page rows, not all, plus when I go to next page, previous pages value flushes.
        baz.Property = textbox.value //For sample, reading value for calculation
    Next

    Calc() //Some way to calculate all changed values

    If pass Then
        Save()
    Else
        Cancel()
    End If
End Sub

1 个答案:

答案 0 :(得分:0)

您不能那样做。 GridView仅包含页面上可见的行数。因此,在分页时,将页面的更改存储在一些临时数据中,例如List<class>DataTable,并在分页时从那里重新加载GridView。 这样,您可以进行所有更改,并可以通过迭代数据集中的项目一次保存所有更改。

或者您可以保存每页的更改,而不是一次保存所有更改。可以。