首页 > 解决方案 > 基于数据库字段 Asp.net 动态创建控件

问题描述

我有一个看起来像这样的数据库表:

字段ID form_id 控制类型 父母身份 订单号
1 1 控制板 0 0
2 1 文本框 0 1
3 1 复选框 0 0
4 1 控制板 1 0
1 1 复选框 4 0
1 1 文本框 4 1

我想将其他字段附加到此表,但我想通过使用递归在关联面板中动态创建控件。

我使用 page_load 事件中的两个参数调用 load_form,我的页面中有一个名为 PnlMain 的面板,我希望将动态加载的控件放置在该面板中。

谁能帮我解决如何仅加载与“面板”相关联的控件,其 fieldid 等于关联控件的 parentid

这是我的代码。

Sub load_form(c As Control, Optional parent_id As Integer = 0)
    i = i + 1
    Dim frmid As Integer
    If Request("formid") Is Nothing Then
        frmid = 1
    Else
        frmid = Request("formid")
    End If


    Dim dt As DataTable
    Dim sql As String = ""
    If parent_id = 0 Then
        sql = "SELECT * from form_fields where form_id=" & frmid & " order by parentid, order_number"
        dt = GetData(sql)
    Else
        sql = "SELECT * from form_fields where form_id=" & frmid & " and parentid=" & parent_id & "  order by parentid, order_number"
        dt = GetData(sql)
    End If

    If dt.Rows.Count > 0 Then
        For Each row As DataRow In dt.Rows
            ' MsgBox(sql)
            Dim p As New Panel()
            If row(2).ToString.Trim(" ") = "panel" Then
                '  MsgBox(dt.Rows(0)(0))
                Dim pnl As New Panel()
                pnl.ID = "pnl" & row(0)
                pnl.GroupingText = row(9)
                p = pnl
                load_form(p, row(0))
            End If
            If row(2).ToString.Trim() = "textbox" Then
                Dim t As New TextBox With {
                    .CssClass = "form-control"}
                t.Attributes.Add("showto", "true")
                t.Attributes.Add("dbdata", "true")
                t.Attributes.Add("placeholder", "Enter O2 Level...")
                t.ID = "Txt" & i
                p.Controls.Add(t)
            End If
            If row(2).ToString.Trim() = "checkbox" Then
                Dim cb As New CheckBox With {
                    .CssClass = "cb form-control"}
                cb.Attributes.Add("showto", "All")
                cb.Attributes.Add("dbdata", "true")
                cb.Attributes.Add("title", row("title").ToString.Trim())
                cb.Attributes.Add("altValue", row("altvalue").ToString.Trim())
                cb.Text = row(7).ToString.Trim()
                cb.ID = "cb" & i
                p.Controls.Add(cb)
            End If
            c.Controls.Add(p)
   
        Next
   End If
End Sub

标签: asp.net

解决方案


推荐阅读