'我写了一种方法,通过遍历来做的.
'可以实现效果,不过效率不高。
'关键是不知道能datarow如何得到datatable的rowindex.
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
'控件DataGrid1的DataSource为dtable(dtable为一个datatable)
'返回排序后datatable对应的记录的行号
Dim result As Integer = -1 '查找到的结果,如果失败则,返回-1
Dim index As Integer '记录着DataGrid1中的CurrentRowIndex()
Dim str As String '用于调试的输出信息
Dim row1, row2 As DataRow 'row1为DataGrid1的CurrentRow,而row2用来遍历dtable
Dim i As Integer
i = dtable.Rows.Count - 1 '从后向前扫描
index = Me.DataGrid1.CurrentRowIndex()
row1 = dtable.Rows(index)
While i > -1
row2 = dtable.DefaultView.Item(i).Row
If row1 Is row2 Then
result = i
Exit While
End If
str = "dtable.row(" & index & "):" & vbCr
str = str & row1.Item(0) & "," & row1.Item(1) & vbCr
str = str & "dtable.DefaultView.Item(" & i & ").Row:" & vbCr
str = str & row2.Item(0) & "," & row2.Item(1) & vbCr
MessageBox.Show(str)
i = i - 1
End While
MessageBox.Show("Datagrid1当前记录对应于dtable的第" & (result + 1) & "行")
End Sub
private Ds as New DataSet
Private Sub DataGrid1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles DataGrid1.Click
Dim rowNum As Integer
Dim AllRow() As DataRow
Dim i, Locate, rowTotle As Integer
AllRow = Ds.Tables("datatable").Select()
rowTotle = Ds.Tables("datatable").Rows.Count
For i = 0 To rowTotle - 1
If Me.DataGrid1.Item(rowNum, 0) = AllRow(i).Item(0) Then
Locate = i
Exit For
Else
Locate = -1
End If
Next
End Sub