I have done it a couple different ways depending on my need at the time.
If you want to control each hex-cell's texture independently then using the instancing approach is one of the better:
Create 1 mesh/model of the hex you want.
Then looping thru your grid array, render the mesh with its new position and/or texture.
This is from an old project (i really need to get back on someday...)
http://img132.imageshack.us/img132/9416/hexgrid1.png
I have also created a single (very large) mesh containing all of the vertices/indexbuffer/normals etc... on top of which I draw one big(bigger) texture.
but that was for a different purpose.
If it is for an overlay ontop of another terrain system you can have (precreated or dynamically rendered) a texture holdin the hex grid you want and Project it on to the surface.
cheers,