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

时间:2016-09-08 05:33:20

标签: 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 As DataGridViewRowCollection) As Boolean

      For Each dtgRow As DataGridViewRow In dtgvNeedPrint
         ''// Do something.
      End 

    End Function

但它的错误。因为 dtg.SelectedRows 不是 DataGridViewRowCollection 。输入isn&t; t匹配。

1 个答案:

答案 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