asp.net - 基于数据库字段 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
解决方案
推荐阅读
- ionic-framework - 创建带有缩略图、按钮和可点击行的离子列表
- laravel - LARAVEL - 在验证之前修改数据库数据
- javascript - 这种 cookie 验证安全吗?
- amazon-web-services - EC2 中有问题的 AWS CLI - 无法连接到 EndPoint
- c - 是否有一种算法可以打印数组子序列的所有排列?
- php - laravel - 如何在使用多个中间件时从第一个中间件返回响应
- c++ - 为什么 c++ 中的组合数据结构比独立数组的性能低
- gradle - Gradle“应用程序”插件更改入口点脚本名称
- java - 根据约定使用引用类进行Java类嵌套
- c# - 如何使用 system.net.http 将 HttpResponseContent 读取为流