Зависит от того, насколько заполнены ваши исходные данные. если вы делаете это с помощью запроса к базе данных, я бы отформатировал результирующий набор в самом запросе примерно так:
(SQL)
select mid, mname, version, baseID
from <table> t
Join (select baseid, max(version) as version
from <table> group by baseID)maxVersion
on maxVersion.baseid = t.baseid and maxVersion.version = t.version
это отформатирует данные перед их помещением в таблицу данных.
Если таблица данных заполняется другими способами, и вам необходимо отфильтровать ее, поместите ее в таблицу данных другого типа. тогда простой способ сделать это (при условии, что ваша таблица данных всегда сортируется указанным выше способом):
for i as integer = 0 to datatable.rows.count - 1
if i < datatable.rows.count - 1 Then
if datatable.rows(i)(4).value <> datatable.rows(i+1)(4).value then
newDataTable.rows.Add(datatable.rows(i).itemArray())
End If
Else
newDataTable.rows.Add(datatable.rows(i).itemArray())
End if
Next
Теперь синтаксис может быть выключен здесь или там (написал это в notpad), но идея логики есть. Предполагая, что у вас один и тот же формат каждый раз, я проверяю, когда строка меняется на новый baseid, и добавляю эту строку в новую таблицу данных. из приведенного вами примера видно, что максимальная версия конкретного baseid - это последняя строка этого baseid.
-Крис