There's no automatic way to do this. You can't have the child ValueList automatically update based on the position of the parent ValueList, because remember that the ValueList services multiple cells in the grid and therefore doesn't have a fixed position - it's position depends on the row int he grid.
There are two basic approaches you can take.
1) Set the ValueList in the Cell (not the column) to a new ValueList that contains the appropriate child informationbased on the value of the parent cell ineach row of the grid. You would likely do this in the InitializeRow event of the grid.
2) Use an UltraDropDown instead of a ValueList and Filter the UltraDropDown based on the value in the parent cell. You would probably do this in AfterCellUpdate (after the parent cell is updated) or maybe in BeforeCellActivate (before the child cell is activated).
This second approach has a slight advantage because if you are using the dropdown to translate data values into display text, the dropdown still contains all of the values. In the first approach, you might set the ValueList of the cell and the current Value of that child cell might not exist on the list which would mean the cell would show the data value - or perhaps the wrong text.
There are samples of using UltraDropDown in the WinGrid Samples Explorer, I'm sure.
It's really not much different than a ValueList. You put the UltraDropDown on the form and bind it just like you would a grid. Then you assign it to the grid column via the ValueList property - just like you do with a ValueList. You will probably want to set the DisplayMember and ValueMember on the UltraDropDown, too. These tell it which column to use for the display text and the data value respectively.
What do you mean by "get rid of this?" Get rid of what?
If you want to trap a change in the selection, you should use the CellChange event of the grid. The dropdown has events that fire, but they will not be very useful to you in a grid.
See the UpdateMode property of the grid's DisplayLayout.