I recently had a DropDownList being pre-populated from a database. I also wanted to insert "Select" at the top of the list and make it a required field. Googling this yielded much misinformation for what turned out to be pretty simple to solve in the end.
Say you have a DDL like this:
<asp:DropDownList id="testDDL" runat="server">
If we try to populate this DropDownList from a database with the values 1,2 and 3, and then try and add a RequiredFieldValidator, that validator will not fire.
From the documentation: "The AppendDataBoundItems property allows you to add items to the ListControl object before data binding occurs. After data binding, the items collection contains both the items from the data source and the previously added items." The italics are mine...
We can use the InitialValue of the RequiredFieldValidator in conjunction with the AppendDataBoundItems property of the DropDownList to arrive at a working solution:
<asp:DropDownList id="testDDL" AppendDataBoundItems="true" runat="server">
<asp:RequiredFieldValidator ID="salaryReqVal" ControlToValidate="salaryDDL"
ErrorMessage="*" Display="dynamic" InitialValue="Select"