ASP.NET - 在运行时向转发器添加行

时间:2011-07-04 13:59:32

标签: asp.net vb.net repeater

Public Partial Class _Default
    Inherits System.Web.UI.Page

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

        If Page.IsPostBack = False Then
            Dim ds1 As New List(Of Link)

            For i = 1 To x
                Dim h As New Link
                ds1.Add(h)
                h.Text = "ssss"
                h.URL = "yyyyy"
            Next

            rptMenu.DataSource = (ds1)
        Else
            rptMenu.DataSource = ViewState("ds1")
        End If

        rptMenu.DataBind()
    End Sub

    Protected Sub addFeild()

        Dim ds1 As List(Of Link) = rptMenu.DataSource
        Dim h As New Link
        ds1.Add(H)
        rptMenu.DataBind()
    End Sub

    Private Sub Menu_PreRender(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.PreRender
        ViewState("ds1") = rptMenu.DataSource
    End Sub
End Class


 <asp:Repeater ID="rptMenu" runat="server">
        <ItemTemplate>
            <tr>
                <td><asp:TextBox CssClass="txtBox" ID="txtText" runat="server" Text='<%# Eval("Text") %>'></asp:TextBox></td>
                <td><asp:TextBox CssClass="txtBox" ID="txtLocation" runat="server" Text='<%# Eval("URL") %>'></asp:TextBox></td>
                <td><asp:Button ID="btnDelete" runat="server" Text="Delete" /></td>
            </tr>
        </ItemTemplate>
        <FooterTemplate>
            <tr><td colspan="3">
                <asp:Button ID="btnAdd" runat="server" Text="Add" OnClick="addFeild" />
            </td></tr></table>
        </FooterTemplate>
    </asp:Repeater>



此代码会在点击Add

时添加行

但是,它会删除所有更改。

如何在不删除更改的情况下向转发器添加行?

1 个答案:

答案 0 :(得分:0)

为了解决这个问题,我使用Reflector来确认Repeater在处理自身添加行时所做的工作,创建一个继承自ExtensibleRepeater的{​​{1}}并允许一行为为每次更新添加。它唯一的问题是你不能使用页脚概念,因为在页脚更新后会在页脚后面显示添加的行。

通过将相关Repeater的{​​{1}}设置为RepeaterItem来处理删除行。

IIRC你丢失回调数据的原因是因为你甚至在回调时调用Visible,这会重置所有现有数据,包括用户表单数据。

代码是专有的,但由于它基于Reflector的.NET 2.0 False显示,我可以向您显示已编辑的版本:

DataBind