You need to declare a row variable outside the scope of the event handlers, then populate it with the data, when the last field us populated, then add the row to the table and update.
Another option is to add the row to the table as you have it now. Before calling update, check that all 3 fields have data. After the update, clear the table. This would also require you to declare the table variable outside the scope of the event handlers.
Private t as ControlsDBDataSet1.StoreData2DataTable
Private Sub DataSubscriber1_DataChanged(sender As Object, e As Drivers.Common.PlcComEventArgs) Handles DataSubscriber1.DataChanged
if t.count=0 then
t.AddStoreData2Row(t.NewRow)
End If
t(0).Data = e.Values(0)
If NOT t(0).IsDataNull AND NOT t(0).IsStateNull AND NOT t(0).isGreenNull THEN
Using ta As New ControlsDBDataSet1TableAdapters.StoreData2TableAdapter
ta.Update(t)
ta.clear
End Using
End If
End Sub