ASPxDropDownEdit列表个性化选择显示,独立或批量提交均可

技术要点:按钮提交选择的项,选择的项必须客户端事件把选中项存入隐藏字段,服务端按钮点击获取隐藏字段的数据,另一个技术要点:无法获取的控件,用while循环把需要的控件寻找出来

<dx:ASPxHiddenField ID="ASPxHiddenField1" runat="server" ClientInstanceName="hiddenField" SyncWithServer="true">

                                                            </dx:ASPxHiddenField>

 <script type="text/javascript">
        
       
         function onCallbackStart() {
             loadingPanel.Show(); // 显示加载面板
        }

        function onListBoxSelectionChanged(s, e) {
            // 1. 获取所有选中项(返回 ASPxClientListEditItem 数组)
            var items = s.GetSelectedItems();

            // 2. 提取值和文本
            var values = [];
            var texts = [];
            if (items != null) {
                for (var i = 0; i < items.length; i++) {
                    values.push(items[i].value);
                    texts.push(items[i].text);
                }
            }

            // 3. 赋值给 ASPxHiddenField(使用 Set 方法,键名自定义)
            hiddenField.Set("SelectedValues", values.join(" "));
            hiddenField.Set("SelectedTexts", texts.join(" "));
        }
       
    </script>

<dx:GridViewDataTextColumn Caption="校区" ShowInCustomizationForm="True" VisibleIndex="2" Width="26%">
                                                            <DataItemTemplate>
                                                                <dx:ASPxDropDownEdit ID="ASPxDropDownEdit_xq" runat="server" AnimationType="None" ClientInstanceName="checkComboBox_xq" Width="100%">
                                                                   
                                                                    <DropDownWindowTemplate>
                                                                        <dx:ASPxListBox ID="listBox_xq" runat="server" ClientInstanceName="checkListBox_xq" 
                                                                            SelectionMode="CheckColumn" Width="100%" >
                                                                           
                                                                           <ClientSideEvents SelectedIndexChanged="onListBoxSelectionChanged" />
                                                                            <Border BorderStyle="None" />
                                                                          
                                                                        </dx:ASPxListBox>
                                                                        <table style="width: 100%">
                <tr>
                    <td style="padding: 4px">
                        <dx:ASPxButton ID="ASPxButton_qr_ygkzxq" runat="server" OnClick="ASPxButton_qr_ygkzxq_Click"
                            Text="确认所选" style="float: right">
                           <ClientSideEvents Click="function(s, e) {onCallbackStart();}" />
                        </dx:ASPxButton>
                    </td>
                </tr>
            </table>
                                                                    </DropDownWindowTemplate>
                                                                   
                                                                </dx:ASPxDropDownEdit>
                                                            </DataItemTemplate>
                                                            <HeaderStyle HorizontalAlign="Center" VerticalAlign="Middle" />
                                                            <CellStyle HorizontalAlign="Left" VerticalAlign="Middle">
                                                            </CellStyle>
                                                        </dx:GridViewDataTextColumn>
protected void ASPxGridView_ygkz_HtmlRowPrepared(object sender, ASPxGridViewTableRowEventArgs e)
        {  //绑定并显示
            try
            {
                //首先,请确保你的代码严格只处理数据行。HtmlRowPrepared 也会为分组行、明细行等触发,
                //在这些行上获取 KeyValue 通常是无效的
                //ASPxDropDownEdit_xq listBox_xq ASPxButton_qr_ygkzxq
                if(e.RowType!=GridViewRowType.Data)
                {
                    return;
                }
                int rowsy = e.VisibleIndex;
                int id = int.Parse(e.KeyValue.ToString());
                //绑定并显示校区
                ASPxDropDownEdit adde_xq = (ASPxDropDownEdit)ASPxGridView_ygkz.FindRowCellTemplateControl(rowsy, null, "ASPxDropDownEdit_xq");
                ASPxListBox lbx_xq = (ASPxListBox)adde_xq.FindControl("listBox_xq");
                // ASPxButton btn_xq = (ASPxButton)adde_xq.FindControl("ASPxButton_qr_ygkzxq");
                //btn_xq.CommandArgument = e.KeyValue.ToString();// CommandArgument='<%# Eval("ID") %>'无数据源表,数据源表校区绑定lbx_xq,没有绑定aspxbutton,
                //因此这里绑定字段,数据为null
                //btn_xq单击事件,还是无法获取btn_xq.CommandArgument
                admin_user gly = (admin_user)ViewState["dngly068"];
                var cx_xq = from aa in sjklj.校区
                            where aa.dwid == gly.dwid
                            select aa;
                lbx_xq.DataSource = cx_xq;
                lbx_xq.TextField = "校区名称";
                lbx_xq.ValueField = "校区名称";
                lbx_xq.DataBind();
                //显示选中项
                var cx_xzxq = (from aa in sjklj.员工基础信息
                               where aa.ID == id
                               select aa.校区名称).FirstOrDefault();//多个校区用空格分割
                if (cx_xzxq != null)
                {
                    if (string.IsNullOrWhiteSpace(cx_xzxq.Trim()))
                    {
                        return;
                    }
                    string[] xqmc = cx_xzxq.Trim().Split(' ');//只有一个校区,则去索引为0的
                    foreach (string xq in xqmc)
                    {
                        lbx_xq.Items.FindByText(xq).Selected = true;
                    }
                    adde_xq.Text = cx_xzxq.Trim(); //把选中项显示在ASPxDropDownEdit_xq上
                }
               

            }
            catch
            {

            }
        }
protected void ASPxButton_qr_ygkzxq_Click(object sender, EventArgs e)
        {
            //listBox_xq ASPxDropDownEdit_xq ASPxGridView_ygkz
            //选择多项并显示,取消listbox自动回传和选择变化事件,加入同级listbox的按钮,命令参数绑定主见和可视化索引
            //(通过主键可以获取本行可视化索引),
            //然后按钮点击事件找到aspxcomboxedit,再用aspxcomboxedit的发现控件找到listbox,获取选择项目,保存到数据库。
            //CommandArgument='<%# Eval("ID") %>' 
            Control ctrl = sender as Control;
            ASPxDropDownEdit adde_xq = null;
           
            // 沿控件树向上查找,跳过 TemplateContainerBase
            while (ctrl != null)
            {
                if (ctrl is ASPxDropDownEdit)
                {
                    adde_xq = ctrl as ASPxDropDownEdit;
                    break;
                }
                ctrl = ctrl.Parent;   // 用 Parent 比 NamingContainer 更直观
            }

            if (adde_xq == null) return;
            ASPxButton btn = sender as ASPxButton;
            if(btn!=null)
            {

                //测试
                /*
                this.ASPxLabel_tytsxx.Text = btn.CommandArgument;
                this.ASPxPopupControl_tytsxx.ShowOnPageLoad = true;
                return;
                */
                // int id = int.Parse(btn.CommandArgument);//主键
                // int rowsy = ASPxGridView_ygkz.FindVisibleIndexByKeyValue(id);//行visbleindex

                GridViewDataItemTemplateContainer container = (GridViewDataItemTemplateContainer)adde_xq.NamingContainer;
                    ASPxListBox alb_xq = (ASPxListBox)adde_xq.FindControl("listBox_xq");
                    int id = int.Parse(container.KeyValue.ToString());
                    string xqlj = "";//校区,可以多个
                                     /*只能从客户端获取,否则丢失数据,一个都没有选择
                                       foreach (ListEditItem li in alb_xq.Items)
                                       {
                                           if(li.Selected)
                                           {
                                              xqlj += li.Text + " ";
                                           }
                                       }
                                       */
                object value = ASPxHiddenField1.Get("SelectedValues"); 
                string strValue = value?.ToString(); // 根据实际类型转换
                xqlj = strValue.Trim();//选中的一个或多个校区
                    var cx_xq = (from aa in sjklj.员工基础信息
                                 where aa.ID == id
                                 select aa).FirstOrDefault();
                    if (cx_xq != null)
                    {
                        cx_xq.校区名称 = xqlj;
                        sjklj.SaveChanges();
                    }
                ASPxButton_cxjzg_kz_Click(null, null);//刷新
                //测试
                /*
                 this.ASPxLabel_tytsxx.Text = xqlj;
                 this.ASPxPopupControl_tytsxx.ShowOnPageLoad = true;
                 return;
                 */
            }
            }

渝公网安备 50011902000225号

渝ICP备18008233号-1