动态添加用户控件到Asp表

时间:2013-03-04 15:58:37

标签: asp.net vb.net user-controls celltable

我正在尝试使用数据集中的一些数据动态地将输入复选框类型 asp文本框添加到Asp Tablecell。我已经阅读了很少有关于此的帖子,但没有一个组合想要达到。

这是我正在使用的代码(其中 ds 是数据集, tblMeasuredChar 是Asp表):

   If ds.Tables(0).Rows.Count > 0 Then

        For Each dr As DataRow In ds.Tables(0).Rows
            Dim tr As New TableRow()

            'defining input
            Dim tc As New TableCell()
            tc.Text = "<input type=" & Chr(34) & "checkbox" & Chr(34) & " name=" & Chr(34) & "chkMeasuredChars" & Chr(34) & " value=" & Chr(34) & dr("id") & Chr(34) & "/>" & dr("description")

            'defining unique textbox
            Dim txtbx As New TextBox()
            txtbx.ID = "tbMeasuredChars" & dr("id")
            'add it to the cell
            tc.Controls.Add(txtbx)

            'add the cell to the row
            tr.Controls.Add(tc)

            tblMeasuredChar.Rows.Add(tr)
        Next
    End If

问题在于我只显示了添加到TableRow的最后一个“东西”。我必须使用这种类型的输入,不可能使用一些asp复选框。是否可以将用户控件添加到已有其他文本文本的TableCell?

我已经尝试添加TableCell,如 tr.Cells.Add(tc)和其他一些组合,但结果仍然相同。将控件添加到单元格会使复选框(以及早期定义的所有内容)消失。

谢谢大家。

1 个答案:

答案 0 :(得分:1)

您应该使用Literal control,而不是使用.Text属性。像这样:

If ds.Tables(0).Rows.Count > 0 Then

    For Each dr As DataRow In ds.Tables(0).Rows
        Dim tr As New TableRow()

        'defining input
        Dim tc As New TableCell()
        tc.Controls.Add(New LiteralControl("<input type=" & Chr(34) & "checkbox" & Chr(34) & " name=" & Chr(34) & "chkMeasuredChars" & Chr(34) & " value=" & Chr(34) & dr("id") & Chr(34) & "/>" & dr("description")))

        'defining unique textbox
        Dim txtbx As New TextBox()
        txtbx.ID = "tbMeasuredChars" & dr("id")
        'add it to the cell
        tc.Controls.Add(txtbx)

        'add the cell to the row
        tr.Controls.Add(tc)

        tblMeasuredChar.Rows.Add(tr)
    Next
End If

听起来这很好地满足了您的需求,因为它不像普通的ASP.NET serv控件,它基本上只是静态HTML文本。从上面链接的文档:

  

ASP.NET编译所有HTML元素和不可读的可读文本   要求服务器端处理此类的实例。对于   例如,一个不包含runat =“server”的HTML元素   其开始标记中的属性/值对被编译为   LiteralControl对象。

因此,您的文本基本上已经编译成Literal控件。我认为只需使用.Text属性和.Controls集合即可解决您所遇到的显示问题。