2009-04-16 5 views
1

Я нашел время для дизайнерского решения о том, как указывать «none selected» в связанном с данными ComboBox. Я хочу применить это ко всем будущим событиям, когда ComboBox нуждается в этом. Нельзя установить SelectedIndex на -1 в коммандах с привязкой данных, а также нельзя установить значение SelectedValue равным null.Dummy Item в ComboBox

Обычно предлагаемые решения включают добавление фиктивной строки в комбо, но без знания объектов, привязанных к строкам, комбо не может надежно создать фиктивный объект таким образом, чтобы отображать сообщение «none selected». Я не хочу добавлять другой элемент в источник данных, так как это приведет к компрометации списка для других клиентов, которые не используют фиктивный объект.

Какие еще существуют варианты? Кстати, я использую Telerik RadComboBox, но этот сценарий не относится к элементу управления Telerik.

ответ

2

Вы можете определить «пустой элемент» в разметке, и добавить любые элементы данных переплета:

<asp:DropDownList DataSourceID="..." AppendDataBoundItems="true" ...> 
    <asp:ListItem Value="-1" Text="None"></asp:ListItem> 
</asp:DropDownList> 

Ключ заключается в том, чтобы указать AppendDataBoundItems = «истина» для добавления элементов с привязкой к данным для любых элементов, которые были указаны непосредственно в разметке.

Это работает для стандартного ASP.NET DropDownList, а также для Telerik RadComboBox.

+2

Также стоит отметить, что если вы сделаете это (что я предлагаю :)), и вы хотите сделать это обязательное поле. Вы можете указать свойство Initial_value = "- 1" на RequiredFieldValidator –

1

Добавить новый элемент перед установкой данных и установить AppendDataboundItems = true;

cbo.AppendDataboundItems = true; 
cbo.Items.add(new ListItem("None", "-1"); 
cbo.DataSource = x; 
cbo.DataBind(); 
0

Надежда Я не собственность как AppendDataBoundItems в ThickClient (окно приложения) Лучше вставить фиктивная строка в таблице источника данных в индексе нулевому.

 DataRow dr = dtsource.NewRow(); 
     dr["username"] = "--New User---"; 
     dr["Userid"] = 0; 


     dtsource.Rows.InsertAt ((dr),0); 
     cmbToUser.DataSource = dtsource; 
0

IMO это место, где привязка данных падает на его лице. На элементах управления без привязки это очень просто - просто добавьте фиктивный элемент в поле со списком, прежде чем вручную добавить другие элементы.

Чтобы надежно сделать это со всеми типами comboboxes, которые являются привязкой к базе данных, вам необходимо добавить элемент в свой набор данных - что-то, что нарушает разделение представления и функции, которые, как предполагается, должны привести к необходимости привязки данных.

Чаще всего привязка данных экономит время до точки. Когда вы начинаете взламывать вещи, чтобы преодолеть недостаток привязки данных, вы больше не экономить время.

Моя рекомендация для этого, как правило, для переоценки того, является ли привязка данных правильным решением.

/Рант над