в первую очередь: насколько я знаю, что размещение диалогового окна внутри табуляции является плохой практикой ... вам лучше вытащить его ...
и теперь на ваш вопрос:
извините, мне потребовалось некоторое время, чтобы получить то, что именно вы хотели реализовать,
сделал это сейчас в моем веб-приложении, и он работает
, как я уже говорил, : диалоговое окно `p: tabView,
покидает диалог p:, как вы первоначально предположили:
<p:dialog modal="true" widgetVar="dlg">
<h:panelGrid id="display">
<h:outputText value="Name:" />
<h:outputText value="#{instrumentBean.selectedInstrument.name}" />
</h:panelGrid>
</p:dialog>
, а командная ссылка p: должна выглядеть так (все, что я сделал это изменить атрибут обновления)
<p:commandLink update="display" oncomplete="dlg.show()">
<f:setPropertyActionListener value="#{lndInstrument}"
target="#{instrumentBean.selectedInstrument}" />
<h:outputText value="#{lndInstrument.name}" />
</p:commandLink>
то же самое работает в моем веб-приложении, и если это не сработает для вас, то я думаю, что что-то не так в вашем java-компоненте ...
Я думаю, что Вы хотите сделать, это:
<asp:DropDownList ID="DropDownList1" runat="server" AppendDataBoundItems="true">
<asp:ListItem Text="--Select One--" Value="" />
</asp:DropDownList>
Удостоверяются, что 'AppendDataBoundItems' установлен на верный , или иначе Вы очиститесь '-Выбор Один -' элемент списка при привязке данных.
, Если у Вас есть свойство 'AutoPostBack' набора выпадающего списка к верный , необходимо будет также установить свойство 'CausesValidation' на верный , затем используют 'RequiredFieldValidator' для проверки '-Выбор Один -' опция не вызывает обратную передачу.
<asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ControlToValidate="DropDownList1"></asp:RequiredFieldValidator>
То, что я делаю, установлено текстовое свойство выпадающего списка ПОСЛЕ ТОГО, КАК я связываю с данными его. Что-то вроде этого:
protected void LoadPersonComboBox()
{
var p = new PeopleBLL();
rcmbboxEditPerson.DataSource = p.GetPeople();
rcmbboxEditPerson.DataBind();
rcmbboxEditPerson.Text = "Please select an existing person to edit...";
}
Это заставляет начальное видимое значение из этого выпасть, обнаруживаются, но не на самом деле быть частью выпадающего, и при этом это не выбираемое.
Добавьте объект и установите его свойство "Selected" на истинный, Вы, вероятно, захотите установить "appenddatabounditems" свойство на истинный также, таким образом, Ваше начальное значение не будет удалено при привязке данных.
, Если Вы говорите об устанавливании начального значения, которое находится в Ваших связанных с данными объектах затем, сцепляются в Ваше ondatabound событие и устанавливают, какой индекс Вы хотите к selected=true, Вы захотите перенести его в "если не page.isPostBack затем...." хотя
Protected Sub DepartmentDropDownList_DataBound(ByVal sender As Object, ByVal e As System.EventArgs) Handles DepartmentDropDownList.DataBound
If Not Page.IsPostBack Then
DepartmentDropDownList.SelectedValue = "somevalue"
End If
End Sub
Я знаю, что у этого уже есть выбранный ответ, но я хотел бросить свои два цента. У меня есть раскрывающийся список привязки данных:
<asp:DropDownList
id="country"
runat="server"
CssClass="selectOne"
DataSourceID="country_code"
DataTextField="Name"
DataValueField="CountryCode_PK"
></asp:DropDownList>
<asp:SqlDataSource
id="country_code"
runat="server"
ConnectionString="<%$ ConnectionStrings:DBConnectionString %>"
SelectCommand="SELECT CountryCode_PK, CountryCode_PK + ' - ' + Name AS N'Name' FROM TBL_Country ORDER BY CountryCode_PK"
></asp:SqlDataSource>
В коде позади у меня есть это - (который по умолчанию выбирает Соединенные Штаты):
if (this.IsPostBack)
{
//handle posted data
}
else
{
country.SelectedValue = "US";
}
Сначала страница загружается на основе значения 'US', а не пытается беспокоиться о selectedIndex ( что, если в таблицу данных добавлен еще один элемент - я не хочу перекодировать)
Я знаю, что это устарело, но сочетание этих идей приводит к очень элегантному решению:
Сохраните все настройки свойств по умолчанию для DropDownList (AppendDataBoundItems = false, элементы пустые). Затем обработайте событие DataBound следующим образом:
protected void dropdown_DataBound(object sender, EventArgs e)
{
DropDownList list = sender as DropDownList;
if (list != null)
list.Items.Insert(0, "--Select One--");
}
Изюминкой является то, что этот единственный обработчик может использоваться любым количеством объектов DropDownList или даже помещаться в универсальную служебную библиотеку для всех ваших проектов.