该功能必须支持两种情况 第一种情况,它可以在datagridview中接收所有行。 和第二种情况,它只能接收选定的行。
If Case_A Then
PrintLabel(dtg.SelectedRows)
End If
If Case_B Then
PrintLabel(dtg.Rows)
End If
功能PrinLabel可能是这样的
Public Function PrintLabel(ByVal dtgvNeedPrint As DataGridViewRowCollection) As Boolean
For Each dtgRow As DataGridViewRow In dtgvNeedPrint
''// Do something.
End
End Function
但它的错误。因为 dtg.SelectedRows 不是 DataGridViewRowCollection 。输入isn&t; t匹配。
答案 0 :(得分:3)
您不能使用任何一种类型,因为它们都不会继承另一种类型。相反,将参数声明为类型IEnumerable(Of DataGridViewRow)
,然后您可以在任一集合上调用Cast(Of DataGridViewRow)
并将结果传递给您的方法。无论如何,只要IEnumerable
,如果您打算做的是使用For Each
循环遍历列表。
Public Function PrintLabel(rows As IEnumerable(Of DataGridViewRow)) As Boolean
For Each row In rows
'' Do something.
End
End Function
If Case_A Then
PrintLabel(dtg.SelectedRows.Cast(Of DataGridViewRow)())
End If
If Case_B Then
PrintLabel(dtg.Rows.Cast(Of DataGridViewRow)())
End If