使用动态创建的控件编辑/插入/删除

时间:2012-08-07 13:28:37

标签: asp.net vb.net webforms

我的目标是基本上创建一个GridView列表(每个都映射到一个表),具有编辑,删除和插入功能。 (插入功能可以使用页脚中的模板字段完成。)

我有一个嵌套在转发器中的gridview,每个都是动态创建的。我已经使用绑定字段成功填充了gridview(尽管我需要最终将其更改为模板字段以获取下拉列表和插入)。但是,现在我正在考虑编辑/删除/插入,我想知道是否有更好的方法。

做我想做的最好的方法是什么?我觉得我让它变得比它应该更难,GridView可能不是最好的控件。我应该只使用嵌套的中继器吗?在转发器中使用ListView?

如果您认为有更好的方法,请提供建议/示例。谢谢!

当前代码:

<asp:Repeater ID="FormRepeater" DataSourceID="sdsRepeater" runat="server">
    <ItemTemplate>
        <asp:HiddenField ID="FormID" Value='<%# Bind("FormID") %>' runat="server" />
        <asp:HiddenField ID="tablename" Value='<%# Bind("TableName") %>' runat="server" />
        <div class="gvHeader2">
            <div class="gvHeader">
                <asp:Label ID="lblFormName" runat="server" Text='<%# Bind("FormName") %>'></asp:Label>
            </div>
            <div class="EditFormImage">
            </div>
            <div class="CreateFormLink">
                <asp:HyperLink ID="lnkCreateForm" runat="server">
                    Create New
                </asp:HyperLink>
            </div>
        </div>

        <div class="gv">
        <asp:GridView ID="gvForms" runat="server" DataSourceID="sdsGVForms" 
            DataKeyNames="FormDataID"
            AutoGenerateColumns="false"
            AutoGenerateEditButton="true"
            OnRowEditing="GV_RowEditing"
            OnRowCommand="GV_RowCommand"
        >
            <Columns>
            </Columns>
        </asp:GridView>

        </div>

    </ItemTemplate>
</asp:Repeater>

    Private Sub FormRepeater_ItemDataBound(sender As Object, e As System.Web.UI.WebControls.RepeaterItemEventArgs) Handles FormRepeater.ItemDataBound

    Dim TableName As String = CType(e.Item.FindControl("tablename"), HiddenField).Value
    Dim FormID As Integer = CType(e.Item.FindControl("FormID"), HiddenField).Value
    Dim ProductID As Integer = Page.RouteData.Values("ProductID")
    Dim sdsForms As SqlDataSource = CType(e.Item.FindControl("sdsGVForms"), SqlDataSource)
    Dim gvForms As WebControls.GridView = CType(e.Item.FindControl("gvForms"), GridView)
    Dim dt As DataTable = F.GetFormFieldsToDisplayInList(FormID)
    For Each r As DataRow In dt.Rows
        Dim bfield As BoundField = New BoundField
        bfield.DataField = r(0)
        bfield.HeaderText = r(1)
        gvForms.Columns.Add(bfield)
        FieldList.Add(r(0))

    Next
    sdsForms.SelectCommand = "SQL Query..."
    gvForms.DataBind()

End Sub

1 个答案:

答案 0 :(得分:0)

不知道你的要求,很难说。

但是,这里有一个网格可以比较ListView,GridView,DataList和您可能会觉得有用的Repeater。

http://weblogs.asp.net/anasghanem/archive/2008/09/06/comparing-listview-with-gridview-datalist-and-repeater.aspx