The "trick" is called "Persistence of Vision".
The idea is that you are never controlling just one dot, but that you are controlling the whole array, but doing it either one row, or one column, at a time.
You nominate one direction to be the "common" direction - in this example we'll take that to be the ROW. We'll also assume that the ROW has to be set to 0V and the COLUMN has to be set to 3V to light an LED.
You then need to scan through each row, setting that row to 0V, and all the other rows to 3V, so that only LEDs on that row can turn on. You then turn on the LEDs for that row (by driving the COLUMN pins to 3V). Then you turn them off again, and move on to the next row. Repeat until you have done all the rows, then go back to the start.
If you do it fast enough it looks like you have all the rows running at once, but each row gets its own set of LEDs turned on.
You would normally maintain an array of LED states in your program (also called a "Frame Buffer"), and drawing a character is then a matter of setting the different LED states in that array. Your display routine then uses those LED states to determine which LEDs to turn on for any specific row.