Vb.net 如何构建可以接收DatagridView.Rows或DatagridView.SelectedRows的函数?
该函数必须支持两种情况 第一种情况,它可以接收datagridview中的所有行。 第二种情况是,它只能接收选定的行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
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
两种类型都不能使用,因为它们都不继承另一种。相反,将参数声明为typeIEnumerable(属于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