从gridview单元格内的标签获取文本(VB)

时间:2014-12-17 13:58:22

标签: asp.net vb.net gridview

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, ""))

1 个答案:

答案 0 :(得分: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

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


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

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