首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DevExpress在ClientSide中获得ASPxComboBox的选择值

DevExpress在ClientSide中获得ASPxComboBox的选择值
EN

Stack Overflow用户
提问于 2017-01-30 09:31:36
回答 3查看 7.4K关注 0票数 1

我有一个ASPxGridview,其中包含一个带有ASPxComboBox的字段,我希望获取ASPxComboBox的选定值,并将其显示在标签中。在下面的代码中,我只是将值存储在警告()消息上。但是我得到的只是一个“空”value.Can,有人知道如何解决我的问题吗?非常感谢。

,这是我到目前为止所拥有的

代码语言:javascript
复制
<dx:ASPxGridView ID="ASPxGridView2" OnRowDataBound="ASPxGridView2_RowDataBound" ClientInstanceName="grid" runat="server" AutoGenerateColumns="False" DataSourceID="fordtl" KeyFieldName = "chndtl_no">

<dx:GridViewDataTextColumn FieldName="product" Name="dd_product" ShowInCustomizationForm="true" VisibleIndex="7">
<SettingsHeaderFilter>
<DateRangePickerSettings EditFormatString="" />
</SettingsHeaderFilter>
<EditItemTemplate>
<dx:ASPxComboBox ID="ASPxComboBoxProduct" runat="server" ClientInstanceName="avery" AutoPostBack="true" DataSourceID="Product" EnableCallbackMode="true" TextField="pd_product">
<ClientSideEvents SelectedIndexChanged="function(s, e) { OnProductChanged(s);}"></ClientSideEvents>
</dx:ASPxComboBox>
</EditItemTemplate>
</dx:GridViewDataTextColumn>

</dx:ASPxGridView>

JavaScript

代码语言:javascript
复制
function OnProductChanged(s, e) {
   var getProduct = document.getElementById("ASPxComboBoxProduct");
   alert(getProduct);
}
EN

回答 3

Stack Overflow用户

发布于 2017-01-30 10:13:22

把这个换成你的aspx代码-

代码语言:javascript
复制
<ClientSideEvents SelectedIndexChanged="function(e,s) { OnProductChanged();}">
</ClientSideEvents>

从这里替换您的javascript函数并检查。

代码语言:javascript
复制
function OnProductChanged(e, s)
{
      var selectedValue = e.lastSuccessValue;
      alert(selectedValue);
}
票数 1
EN

Stack Overflow用户

发布于 2017-01-30 10:30:22

将SelectedIndexChanged JS处理程序更改为:

代码语言:javascript
复制
function OnProductChanged(s, e) {
   var getProduct = s.GetValue();
   alert(getProduct);
}

但是,如果要用新选择的数据更改存储在其他地方的标签,那么如何知道组合框值是针对哪个特定网格的行更改的?

如果这是您的要求,请发表意见,因为DX有一种处理这种情况的方法。

更新:为了能够区分在哪一行,组合框与EditItemTemplate选择的索引发生了变化,您需要为每个这样的组合框分配一个唯一的ClientInstanceName。这个ClientInstanceName应该包含行索引部分,例如:avery_01

要做到这一点,您需要处理正在显示的每个组合框的OnInit事件,并在其中分配ClientInstanceName,例如如下所示:

代码语言:javascript
复制
...
<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中的DataItemTemplate,也应该这样做:

代码语言:javascript
复制
...
<dx:GridViewDataColumn Caption="Label Column Caption">
<DataItemTemplate>
   <ASPxLabel ID="ASPxLabel" runat="server" OnInit="ASPxLabel_Init" />
</DataItemTemplate>
</dx:GridViewDataColumn>
...

然后在代码后面添加:

代码语言:javascript
复制
// 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处理程序:

代码语言:javascript
复制
function OnProductChanged(s, e, label) {
   var getProduct = s.GetValue();
   alert(getProduct);

   label.SetText(getProduct);
}

注意,上面的label不仅仅是一个字符串或jQuery对象,它是在同一行的另一个网格列中定义的ASPxLabel的真实DevExpress客户端对象,与当前处理该事件的组合框相同。因此,它应该所有的DX客户端方法,如SetText()和GetText。

因此,上述方法已得到验证。注意,我直接输入的所有代码片段都没有编译。但我相信你应该能把它们粘起来。

类似案件:

  1. Checking if a aspxgridview Master-Detail has any row checked in Client Side
  2. https://www.devexpress.com/Support/Center/Question/Details/Q372498

HTH

票数 1
EN

Stack Overflow用户

发布于 2017-02-23 20:51:22

标签将被更新,而组合框更改事件,但它将失去它的价值回发。避免回发的组合框索引改变,然后标签将被更新,根据您的需要。

代码语言:javascript
复制
AutoPostBack="false"
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41932562

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档