Всё делается декларативно. Тут Try/Catch не поможет
Сделал так:
<asp:gridview ID="grid_view" runat="server"
DataSourceID="sql_item"
DataKeyNames="id">
<Columns>
....
<asp:TemplateField>
<EditItemTemplate>
<asp:DropDownList runat="server" ID="ddl_parent_name"
DataSourceID="sql_item_parent"
DataTextField="parent_name"
DataValueField="id"
SelectedValue='<%# Bind("id_item_group") %>' />
</EditItemTemplate>
</asp:TemplateField>
....
<asp:SqlDataSource ID="sql_item_parent" runat="server"
ConnectionString="..."
SelectCommand="SELECT null as [id], '---' as [item_name]
UNION
SELECT id, item_name FROM t_item">
<SelectParameters>
<asp:Parameter Name="id" Type="double" />
</SelectParameters>
</asp:SqlDataSource>
Таким образом закрывается дырка на наличие null значений.
"SELECT null as [id], '---' as [item_name] UNION ..."
Можно ли не дописывать в каждом запросе эту строчку? Где-то в опциях контрола DropDownList наверняка есть какая-то опция добавляющая по умолчанию строчку типа 'Не установлено' для значений NULL?