我有一个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, ""))
答案 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