I have a GridView bound to an DataSource query with parameters tied to form controls.
What is the standard / best-practices way to handle optional query parameters?
On your DataSource, have your ControlParam use the DefaultValue:
<asp:ControlParameter Name="CustomerID"
ControlID="DropDownList1" PropertyName="SelectedValue"
DefaultValue="-1" />
Then in your SQL statement, check for that same default value from your ControlParameter:
SELECT *
FROM Invoices
WHERE (CustomerID = @CustomerID OR @CustomerID = -1)