I use a "step" kind of logic. Each check function returns either 1 (checked ok, or 0, check failed)
if(checkRow(row, col)) {
if(checkCol(row, col)) { //only if row checks out OK, check the col
if(checkBox(row, col)) { //only if row and col check out OK, check box
number is OK
}
}
}
To speed things up a bit, I use a 1D Sudoku array, but have also used 2D Sudoku grid arrays in the past.
To handle the checkBox() logic, I use two tables. The first one simply tells me, for any sqr, what box it's in - simple. The second table tells me what 8 squares need to be checked for any box number. (one sqr is the digit being checked).
It's a little extra work to set it up, but it makes your code shorter, and your program, a bit faster.
If you have specific questions, you may want to visit:
http://www.setbb.com/phpbb/?mforum=sudoku
They've forgotten more about programming Sudoku, then most of us will ever care to learn. It's not a very active board, however.