Изменения обработчика SelectedIndexChanged JS к этому:
function OnProductChanged(s, e) {
var getProduct = s.GetValue();
alert(getProduct);
}
Но если вы хотите изменить метку, хранящуюся в другом месте с вновь выбранными данными, как бы вы знать, какой именно сетку-х подряд значения выпадающего был изменен?
Комментарий, если это ваше требование, потому что у DX есть способ справиться с этим случаем.
UPDATE: Чтобы иметь возможность различать в какой строке выпадающий список из EditItemTemplate был выбранный индекс изменился, необходимо назначить уникальный ClientInstanceName для каждого такого ComboBox. Это ClientInstanceName должно содержать часть индекса строки, например: avery_01
.
Чтобы быть в состоянии достигнуть этого вам нужно обрабатывать событие OnInit для КАЖДОГО выпадающего списка отображаются и назначить ClientInstanceName там, как, например, следующее:
...
<EditItemTemplate>
<dx:ASPxComboBox ID="ASPxComboBoxProduct" runat="server"
OnInit="ASPxComboBoxProduct_Init" AutoPostBack="true" DataSourceID="Product"
EnableCallbackMode="true" TextField="pd_product">
</dx:ASPxComboBox>
</EditItemTemplate>
...
Примечание Я удалил атрибут ClientInstanceName и ClientSideEvents элемента.
То же должно быть сделано для вашего ASPxLabel помещается внутри ASPxGridView DataItemTemplate:
...
<dx:GridViewDataColumn Caption="Label Column Caption">
<DataItemTemplate>
<ASPxLabel ID="ASPxLabel" runat="server" OnInit="ASPxLabel_Init" />
</DataItemTemplate>
</dx:GridViewDataColumn>
...
Затем в коде добавления:
// Handle OnInit for each combobox being displayed
protected void ASPxComboBoxProduct_Init(object sender, EventArgs e)
{
ASPxComboBox dvxCombo = (ASPxComboBox)sender;
GridViewDetailRowTemplateContainer templateContainer =
(GridViewDetailRowTemplateContainer)ASPxGridView2.NamingContainer;
dvxCombo.ClientInstanceName = string.Format("avery_{0}",
templateContainer.VisibleIndex);
// below client instance name should set for the relevant label in the labels
//own OnInit handler below
string targetLabelClientInstanceName = string.Format("label_{0}",
templateContainer.VisibleIndex);
// Note, we're passing the ASPxLabel's ClientInstanceName as a third
// param to the SelectedIndexChanged event handler.
dvxCombo.ClientSideEvents.SelectedIndexChanged =
string.Format("function(s, e) {{ OnProductChanged(s, e, {0}); }}",
targetLabelClientInstanceName);
}
// Handle OnInit for each ASPxLabel which you will be updating with the
// selected combobox value
protected void ASPxLabel_Init(object sender, EventArgs e)
{
ASPxLabel dvxLabel = (ASPxLabel)sender;
GridViewDetailRowTemplateContainer templateContainer =
(GridViewDetailRowTemplateContainer)ASPxGridView2.NamingContainer;
dvxLabel.ClientInstanceName = string.Format("label_{0}",
templateContainer.VisibleIndex);
}
Затем обновите вас JavaScript обработчик как это:
function OnProductChanged(s, e, label) {
var getProduct = s.GetValue();
alert(getProduct);
label.SetText(getProduct);
}
Примечание: выше label
- это не просто строка или jQuery, это реальный объект клиента DevExpress для ASPxLabel, определенный в другом столбце сетки, в той же строке, что и текущее поле со списком, для которого это событие будет обработано. Поэтому все методы DX-клиента должны быть такими, как SetText() и GetText.
Таким образом, вышеуказанный подход был проверен на работу. Обратите внимание: все фрагменты кода, которые я ввел непосредственно без компиляции. Но я надеюсь, что вы сможете приклеить их вокруг.
Подобные случаи:
Checking if a aspxgridview Master-Detail has any row checked in Client Side
https://www.devexpress.com/Support/Center/Question/Details/Q372498
НТН
OMYGOD! Оно работает. Спасибо!!!!! –