Vb.net 如何构建可以接收DatagridView.Rows或DatagridView.SelectedRows的函数?

Vb.net 如何构建可以接收DatagridView.Rows或DatagridView.SelectedRows的函数?,vb.net,datagridview,Vb.net,Datagridview,该函数必须支持两种情况 第一种情况,它可以接收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

该函数必须支持两种情况 第一种情况,它可以接收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。类型不匹配。

两种类型都不能使用,因为两种类型都不能继承另一种。相反,将参数声明为type
IEnumerable(属于DataGridViewRow)
,然后可以对任一集合调用
Cast(属于DataGridViewRow)
,并将结果传递给方法。如果您要做的是在列表上为每个循环一个
,那么您只需要一个
IEnumerable

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

两种类型都不能使用,因为它们都不继承另一种。相反,将参数声明为type
IEnumerable(属于DataGridViewRow)
,然后可以对任一集合调用
Cast(属于DataGridViewRow)
,并将结果传递给方法。如果您要做的是在列表上为每个
循环一个
,那么您只需要一个
IEnumerable

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