GridView - DropDownList - значения NULL

Dark_Scorpion
Дата: 29.04.2007 16:55:23
В GridView отображаются данные из таблицы T_Otdel. При переходе в режим редактирования появляется DropDownList, содержащий справочник для типов отделов из таблицы T_Otdel_Type. Всё работает нормально. НО если так получается, что внешний ключ таблицы T_Otdel ссылается на несуществующую запись из таблицы T_Otdel_Type, либо равен NULL, то происходит сбой.

1. Возможно ли избежать этот сбой?
Dark_Scorpion
Дата: 30.04.2007 19:05:23
?
Dark_Scorpion
Дата: 02.05.2007 07:37:43
?
mikolas
Дата: 02.05.2007 07:44:33
возможно, кострукцией try {} catch {}
Dark_Scorpion
Дата: 02.05.2007 09:21:24
Всё делается декларативно. Тут 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?
Dark_Scorpion
Дата: 02.05.2007 17:18:30
?
Victor_Nicolov
Дата: 02.05.2007 18:37:55
	public class NullIgnoringDropDownList : DropDownList
		{
				public NullIgnoringDropDownList()
						: base()
				{ }

				public override string SelectedValue
				{
						get { return base.SelectedValue; }

						set
						{
								if (value==DBNull.Value.ToString())
										return;
								base.SelectedValue = value;
						}
				}
		}

Victor_Nicolov
Дата: 02.05.2007 18:39:17
                                                            <cc1:NullIgnoringDropDownList ID="dropDownCategories"
                                                                              Width="262px"
                                                                              DataValueField="Id_Categories"
                                                                              SelectedValue='<%# Bind("Categories_Id") %>'
                                                                              DataTextField="Name"
                                                                              runat="server">
                                                            </cc1:NullIgnoringDropDownList>