从网格视图单元格 (VB) 内的标签获取文本



VB

我有一个网格视图,我需要在其中使用模板列,因此它不能直接从单元格中检索文本,而是在标签内。所有标签也有不同的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, ""))

您必须使用 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

最新更新