【问题标题】:Getting text from labels inside gridview cells (VB)从gridview单元格内的标签获取文本(VB)
【发布时间】:2014-12-17 13:58:22
【问题描述】:

VB

我有一个gridview,我需要在其中使用模板列,因此不能直接从单元格中检索文本,而是在标签内。所有标签也有不同的 id,所以我想以编程方式检索单元格内的标签,然后查看标签内的文本。

这是我目前得到的,但是它从来没有设法返回文本,而是返回空字符串(“”)。

Public Function ReturnLabelText(ByVal c As TableCell) As String
    For Each lb In c.Controls
        If lb.[GetType]() = GetType(Label) Then
            Return CType(lb, Label).Text()
        End If
    Next
    Return ""
End Function

函数在这一行被调用:

doc.ReplaceText("@" + gridView.HeaderRow.Cells(i).Text.ToLower, ReturnLabelText(row.Cells(i)).Replace(" ", "").Replace(vbCr, ""))

【问题讨论】:

    标签: asp.net vb.net gridview


    【解决方案1】:

    您必须使用GridViewRow.FindControl("ControlID") 来获取Label 的引用。

    例如,如果你想循环循环所有行:

    For Each row As GridViewRow In Me.GridView1.Rows
        Dim label = DirectCast(row.FindControl("LabelID"), Label)
        Dim text As String = label.Text
        ' ... '
    Next
    

    但如果你想在数据绑定上设置它的文本,我会改用GridView.RowDataBound 事件:

    Protected Sub GridView1_RowDataBound(sender As Object, e As GridViewRowEventArgs) Handles GridView1.RowDataBound
        Select Case e.Row.RowType
            Case DataControlRowType.DataRow
                 Dim label = DirectCast(e.Row.FindControl("LabelID"), Label)
                 Dim text As String = label.Text
        ' ... '
        End Select
    End Sub
    

    您甚至可以通过e.Row.DataItem 获取每一行的DataSource 以访问所有字段。


    如果您有 TableCell 并且想要获取其中的所有标签,您也可以使用 OfType

    Dim firstLabel = c.Controls.OfType(Of Label)().FirstOrDefault()
    If firstLabel  IsNot Nothing Then Return firstLabel.Text
    Return Nothing
    

    【讨论】:

    • 但我不想指定 LabelID。相反,我只想从单元格中获取所有控件并返回标签的文本。
    • 我只需要在遍历每一行的每个单元格时阅读文本。
    • @JacobMason:看看我编辑的答案。您可以使用OfType 过滤并转换为标签。但是,为什么不能使用FincControl("ID")?这使您的代码更加健壮和可读。
    • 我认为如果你使用 FindControl("ID") 你必须指定标签的名称,如果我循环遍历 5 个不同的列,那么每个标签将有一个不同的 ID,即“Label1 "、"Label2" 等?
    • @JacobMason:是的,但是如果您使用比Label1Label123 更有意义的名称,它会增加可读性。例如:Dim lblName = DirectCast(row.FindControl("LblName"), Label) Dim name = lblName.Text。它还可以防止粗心的错误。
    猜你喜欢
    • 1970-01-01
    • 2016-01-21
    • 1970-01-01
    • 2023-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-04
    • 1970-01-01
    相关资源
    最近更新 更多