代码之家  ›  专栏  ›  技术社区  ›  LiamGu

当从服务器端代码创建HTML元素时,我如何在另一个子元素中使用它们的id?

  •  1
  • LiamGu  · 技术社区  · 17 年前

    我在代码后面创建了一个表,其中最后一列包含一个HTML复选框,runat=“server”。

    我使用的代码是:

            Do While reader.HasRows
                Do While reader.Read
                    Dim tNewRow As New HtmlTableRow
                    Dim cellSKU, cellDESCR, cellDept1, cellDeptGrp1, cellDeptRng1, cellStand, cellBoard, cellSelect As New HtmlTableCell
                    cellSKU.InnerHtml = "<a href='edit.aspx?edit=" & reader("SKUN") & "'>" & reader("SKUN") & "</a>"
                    cellDESCR.InnerText = reader("DESCR")
                    cellDept1.InnerText = reader("DPT1")
                    cellDeptGrp1.InnerText = reader("GRP1")
                    cellDeptRng1.InnerText = reader("RNG1")
                    cellBoard.InnerText = reader("BOARD")
                    cellStand.InnerText = reader("STAND")
                    cellSelect.InnerHtml = "<input type='checkbox' id='selectedSKU' value='" & reader("SKUN") & "' runat='server' />"
                    tNewRow.Cells.Add(cellSKU)
                    tNewRow.Cells.Add(cellDESCR)
                    tNewRow.Cells.Add(cellDept1)
                    tNewRow.Cells.Add(cellDeptGrp1)
                    tNewRow.Cells.Add(cellDeptRng1)
                    tNewRow.Cells.Add(cellStand)
                    tNewRow.Cells.Add(cellBoard)
                    tNewRow.Cells.Add(cellSelect)
                    tNewRow.Style.Add("border", "solid 1px #cccccc")
                    skusTable.Rows.Add(tNewRow)
                Loop
                reader.NextResult()
            Loop
    

    Protected Sub editSkus_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles editSkus.Click
    End Sub
    

    有什么方法可以绕过这个问题,或者另一种做事方式吗?

    2 回复  |  直到 17 年前
        1
  •  1
  •   digiguru    17 年前

    这很恶心,但就这样。..

                Dim skusTable As New HtmlTable
                Dim i As Integer
    
                Do While reader.HasRows
                    Do While reader.Read
                        i = i + 1
    
                        Dim tNewRow As New HtmlTableRow
                        tNewRow.ID = "MyRow" & i
                        Dim cellSKU, cellDESCR, cellDept1, cellDeptGrp1, cellDeptRng1, cellStand, cellBoard, cellSelect As New HtmlTableCell
                        cellSKU.InnerHtml = "<a href='edit.aspx?edit=" & reader("SKUN") & "'>" & reader("SKUN") & "</a>"
                        cellDESCR.InnerText = reader("DESCR")
                        cellDept1.InnerText = reader("DPT1")
                        cellDeptGrp1.InnerText = reader("GRP1")
                        cellDeptRng1.InnerText = reader("RNG1")
                        cellBoard.InnerText = reader("BOARD")
                        cellStand.InnerText = reader("STAND")
    'Create the checkbox as a webcontrol and add it to the table cell
                         Dim checkBox As New HtmlControls.HtmlInputCheckBox
                        checkBox.Value = reader("SKUN")
                        checkBox.ID = "selectedSKU"
                        cellSelect.ID = "SelectedCell"
                        cellSelect.Controls.Add(New WebControls.CheckBox)
    
    
                        tNewRow.Cells.Add(cellSKU)
                        tNewRow.Cells.Add(cellDESCR)
                        tNewRow.Cells.Add(cellDept1)
                        tNewRow.Cells.Add(cellDeptGrp1)
                        tNewRow.Cells.Add(cellDeptRng1)
                        tNewRow.Cells.Add(cellStand)
                        tNewRow.Cells.Add(cellBoard)
                        tNewRow.Cells.Add(cellSelect)
                        tNewRow.Style.Add("border", "solid 1px #cccccc")
                        skusTable.Rows.Add(tNewRow)
                    Loop
                    reader.NextResult()
                Loop
    

                Dim myRow As HtmlControls.HtmlTableRow = skusTable.FindControl("MyRow" & i)
                'Probably be good to check the object exists first....
                If Not myRow Is Nothing Then
                    Dim myCell As HtmlControls.HtmlTableCell = myRow.FindControl("SelectedCell")
                    If Not myCell Is Nothing Then
                        Dim myCheckbox As HtmlControls.HtmlInputCheckBox = myCell.FindControl("selectedSKU")
                        If Not myCheckbox Is Nothing Then
                            'Got it! now is it selected?
                            Return myCheckbox.Checked
                        End If
                    End If
                End If
    
        2
  •  0
  •   AnthonyWJones    17 年前

    cellSelect 控制集合,相当于runat=“Server”。然而,这并没有什么帮助,因为您想将事件绑定到此控件,但在回发时,此控件将不再存在。

    您不使用DataGrid来实现此UI有什么原因吗?