This is a slightly different approach to what is posted in Make first row of table all bold.
tabular environments are easily formatted column-wise. Not so much row-wise. However, there are ways around it. Here's one attempt.
You can use an \if... conditional to distinguish between your header/non-header rows. \newif\headerrow defines the condition \ifheaderrow that can be either true (\headerrowtrue) or false (\headerrowfalse). Subsequently you can insert contents before each table entry depending on this condition with the aid of the array package:

\documentclass{article}
\usepackage{array}% http://ctan.org/pkg/array
\newif\ifheaderrow
\newcolumntype{C}{>{\ifheaderrow\bfseries\fi}c}
\begin{document}
\begin{table}
\global\headerrowtrue
\begin{tabular}{|>{\bfseries}c | *{3}{C|}}
\hline
& S1 & S2 & S3 \\
\hline \global\headerrowfalse
D1 & 4217 & 5821 & 1102 \\
D2 & 3679 & 5089 & 991 \\
D3 & 2589 & 3301 & 604 \\
D4 & 1418 & 1722 & 294 \\
\hline
\end{tabular}
\end{table}
\end{document}
The resetting of \headerrowfalse must be made \global, since the modification would otherwise only hold within the group, which is the cell within which it is called.
tabularenvironment you have in mind. Without such information, it's going to be very difficult to provide more specific suggestions. – Mico Feb 22 '12 at 3:16