I added my resume to the site primarily because I wanted to take advantage of the style I've set on the site. So I went "old school" and created a simple table-based output, and simply copied and pasted the data in. When it was all done, it looked just fine on the screen, but I needed to do some tweaking to its printed appearance and to address the very low comfort level I had with having my entire curriculum vitae (another term for a resume; commonly, "C.V.") out there for all the world to see. PRINT CSS One of the coolest thing about cascading style sheets (CSS) is they mustn't necessarily apply to the screen. For example, you can create a separate CSS solely for print output which might be used to strip out a background image or headers or footers from the print output. Please refer to the hot-to on print CSS for detailed information on this subject. You won't regret it! SECURITY I didn't feel comfortable having my entire C.V. posted to the site. So I created a "switch" to turn the display on and off. Very simply, I made the table control itself a server control, and set its visibility in the code behind. So the only way the resume would be visible would be if I "flipped the switch" in the codebehind, viewed it locally, "flipped it back," and then simply posted to the production server as normal, making sure I'd double-check the resume web form once the post was complete to make sure I didn't leave it visible. The concept matured somewhat by setting the "switch" in a configuration file. Now I don't have to bother with the codebehind. I could simply access the appropriate configuration and away I'd go. Then I got pretty sick with it - I created a series of "switches" in a configuration file that applied solely to the resume, and toggled whether to display my contact information, to display employers' name/location data, to display educational institutions' names/ location data, and finally to display miscellaneous information I may or may not include in a particular C.V., depending on the position. Here's how this was done: In .NET, one may have multiple configuration ("config") files below the machine level. You can have a single main config that sits in the application root directory, or you can have a config for each directory if you'd like. These config files are really XML files that follow a specified schema. The node we're interested in is the node, which appears beneath the node, like this: The values you place beneath the node are key/value pairs. Here are the values I used: As you can see above, I have four entries in my config. Note that each key is prefixed with "Resume." This way there's no ambiguity about what section the key belongs to. Now I just need to be able to access these values from within the code and we'll be all set. These key/value pairs may be accessed through a special class in the System.Web namespace. The full path of the class is: System.Web.Configuration.WebConfigurationManager The node is accessible under this WebConfigurationManager class. If you import this class into your codebehind, like this: Imports System.Web.Configuration.WebConfigurationManager it makes it easier to access the key you set. Now, with your Imports statement in place, you can access the data you put in your config. Here's how I access the value for "ResumeIsVisible", which is the first key I included above: 'set whether the resume should be visible or not If Not CBool(AppSettings("ResumeIsVisible")) Then 'make the content invisible tblOuter.Visible = False 'redirect to the error page - better than having them look at a blank form. Response.Redirect("~/error.aspx") Else 'make content visible. tblOuter.Visible = True End If Here, all I've done is used the value I associated with my "ResumeIsVisible" key to determine whether or not I want the table to be visible. Notice that I converted the value to a Boolean in the code, because the value in the config is stored as a string, and I wanted to be sure it would be evaluated properly. As for the other key/value pairs, I simply set visibility on particular table rows or labels. For example, some of the miscellenous information important to a few imployers is in its own section, but a highlight bullet is included up in my "Profile" section. So I wanted to make sure that bullet is absent if the "misc" table row is supposed to be omitted. Another method I used here was changing the text of particular labels. This became important where I had the employer's name in a row in column "A" and the dates of employment in a corresponding row in column "B." I wanted the dates to remain visible but just the employer name to be changed. Placing each employer's name in an control was my answer. Here's what the code looked like: 'set whether resume location information should be visible or not If Not CBool(AppSettings("ResumeEmployerAndInstitutionInformationIsVisible")) Then 'make the employer and institution content invisible lblInstitution1.Text = "Institution Name Withheld" lblInstitution2.Text = "Institution Name Withheld" lblEmployer1.Text = "Employer Name Withheld" lblEmployer2.Text = "Employer Name Withheld" lblEmployer3.Text = "Employer Name Withheld" Else 'make employer and institution content visible. . . . End If Note the name of each label. Even though it goes against good programming technique, this is one situation where you don't want your label name to be too descriptive. If you went with "lblSuperGiantCorp" instead of "lblEmployer1", a check of your Web Form's source code would give you up immediately. Employer Name Withheld duh. :-) That should be it for now! Contact me using the site's contact form if you have questions. Feel free to use the code in your projects. A shout out in your project would be thoughtful. Also, drop me a line and let me know how you might have tweaked things to better suit your needs. Finally, I wouldn't profess to be THE expert on matters represented in my code -- so drop me a line if you have constructive suggestions, too. I'd like to hear from you! Best, halfgk copyright 2007 halfgk.com