ExtJS EditorGridPanel 中的级联组合框

2024-05-06

我有一个正在运行的 EditorGrid 面板,其中两列有 ComboBox 编辑器。两个组合框都是从数据库远程加载的(countryStore and cityStore).

我想限制cityComboBox仅显示所选国家/地区的城市。我需要重新加载cityStore使用数据库中的过滤器(本地过滤的城市太多)。过滤器值为countryComboBox value.

CountryComboBox 中始终有一个值,因为我在创建新记录时添加了 default = 1,所以这不是问题。

我不知道哪个听众适合这里。我需要抓住双击国家/地区单元格之前的那一刻countryComboBox显示并在显示之前过滤组合框(或在检索数据时显示等待消息)。

如果这是不可能的,我可以通过双击单元格打开弹出窗口,从过滤城市的组合框中选择,“确认”并将值输入单元格吗?


我终于成功了。我创建了两个解决方案 - 用于网格内的本地和远程下拉搜索。最后,我决定使用本地搜索(我可以添加country_id to my citiesExtJS 中的查询和过滤),但可以使其适用于远程搜索 - 如果有人需要,我也可以准备该解决方案。

LOCAL SOLUTION

我必须过滤cityCombo使用 beforeQuery 事件,使用来自的 idcountryCombo在同一行。这是代码cityCombo:

var cityCombo = new Ext.form.ComboBox({
    triggerAction: 'all',
    mode: 'local',
    lastQuery: '', // to make sure the filter in the store is not cleared the first time the ComboBox trigger is used
    store: cityDropdownStore,
    displayField: 'city',
    valueField: 'city_id',
    listeners: {
        beforeQuery: function(query) { 
            currentRowId = myGrid.getSelectionModel().getSelected().data.country_id;
            this.store.clearFilter();
            this.store.filter( { property: 'country_id', value: currentRowId, exactMatch: true } );
        }
    }
});

正如你所看到的,当cityCombo双击网格内,我得到country_id在当前行和过滤器中cityStore使用该值。这需要cityStore拥有这些字段:id , country_id, city

仍然存在一个问题:当用户更改countryCombo,城市字段应该更改/警告用户它对于当前国家/地区不正确。这个问题的解决方案很复杂......你可能知道,你无法获得对组合框的parentGrid的引用(否则你可以只调用countryCombo --> parentGrid --> currentRecord --> cityCombo --> change it).

我尝试监听网格本身的 rowchange 事件,但是如果用户在更改后直接单击另一行countryCombo,它改变了错误行的城市。

该解决方案有些高级:我必须将当前行的引用从网格的 beforeedit 事件复制到 cityCombo。这是网格的监听器:

listeners: {
    beforeedit: function(e) {
        // reference to the currently clicked cell
        var ed = e.grid.getColumnModel().getCellEditor(e.column, e.row);    
        if (ed && ed.field) {
            // copy these references to the current editor (countryCombo in our case)
            Ext.copyTo(ed.field, e, 'grid,record,field,row,column');
        }
    }
},

Now our countryCombo拥有在城市发生变化时重置城市所需的所有信息。这是全部countryCombo code:

var countryCombo = new Ext.form.ComboBox({
    id: 'skupina_combo',
    typeAhead: true,
    triggerAction: 'all',
    lazyRender: true,
    mode: 'local',
    store: countryDropdownStore,
    displayField: 'country',
    valueField: 'country_id',
    listeners: {
        change: function(t, n, o) {    // t is the reference to the combo
            // I have t.record available only because I copied it in the beforeEdit event from grid
            t.record.set('city_id', '0');
        }

    }
});

单元格渲染器对我过滤其存储没有任何问题,因此我只需要一个存储来进行渲染和组合框编辑(cityStore)。

远程解决方案要求我为城市创建两家商店 -cityRendererStore and cityDropdownStore,每次都会查询数据库而不是使用过滤器。如果您有太多城市需要进行本地过滤,则这种方法是必要的。我应该提到我并没有在我的应用程序中真正使用城市和国家,我只是创建这个示例来简化事情。

我对最终结果感到非常高兴 - 它提供了网格的所有优点以及通常仅在表单中可用的条件下拉菜单。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ExtJS EditorGridPanel 中的级联组合框 的相关文章

  • 如何在java中的组合框之间使用过滤器?

    我的数据库中有两个表 分别是学期表和课程表 学期表中有学期 ID 课程 ID 课程名称和 Sdepartment 部门名称 课程表有课程 ID 和课程名称 我的 jframe 有两个组合框 第一个用于选择部门 第二个用于选择课程 我想选择所
  • 原生编程对于移动开发有何优势?

    我需要为一家公司在一些主要的移动操作系统上开发应用程序 特别是 iOS Android 和 WP7 我最初计划为三种不同的操作系统编写三个独立的应用程序 每个应用程序都使用本机 SDK 然而 这样做有什么好处吗 有许多可用的跨平台工具 Se
  • ExtJs 4,从容器中删除控件并将其从内存中删除的正确方法是什么?

    这个问题很简单 但我找不到一个好的 明确的答案 正确的方法是什么 从容器中删除控件 在 ExtJs 4 中将其从内存中删除 Ext AbstractContainer remove http dev sencha com deploy ex
  • Sencha-touch :保存登录名/密码(保存会话,多任务)

    我有一个 Java Web 应用程序 其中移动部分是用 Sencha touch 开发的 当我启动 sencha touch 应用程序时 她询问我的登录名 密码 因为该应用程序的访问受到限制 但是我想保存用户的登录名 密码 sencha t
  • WPF 网格布局

    是否可以在 WPF 中使用 Grid 来设计类似的东西 设计列很容易 但是行呢 或者有没有更好的解决方案 比如另一个容器 将每个矩形想象为模块 GroupBox 创建一个包含两列的外部网格 在此网格中 放置另外两个网格 每列一个 这将导致所
  • 当 DataSource 更改时 ComboBox 不会自动更新?

    由于某种原因 当从数据源 一个简单的 BindingList 添加或删除项目时 组合框会相应更新 但如果我编辑这样的项目 它不会自动更新 myBindingList index Name NewName myBindingList inde
  • 无法加载所需框架:extjs 中的 ext@null

    设置 extjs 和 sencha 当我运行应用程序时出现错误无法加载所需的框架 root samuel pc Documents code test sencha app watch Sencha Cmd v6 5 0 180 ERR U
  • 如何确定 ExtJS 4 中 Ext.grid.Panel 的选定单元格?

    我如何获取 Ext grid Panel 的选定单元格 在 ExtJS 3 中可以通过以下方式实现 grid getSelectionModel getSelectedCell 在分机4中有 grid getSelectionModel s
  • 如何使 StringGrid 的列适合网格的宽度?

    我已经寻找解决方案很长时间了 但没有任何运气 有谁知道一个简单的方法来做到这一点 例如 我想拉伸网格的第二列以适应网格的宽度 Use the ColWidths财产 像这样 with StringGrid1 do ColWidths 1 C
  • 当我在组合框中选择一个项目时,如何防止 TextChanged 事件?

    我有一个TextChanged http msdn microsoft com en us library system windows forms control textchanged aspx我的事件ComboBox http msd
  • WPF DataGridTemplateColumn 组合框更新所有行

    我有这个 XAML 它从 ItemSource 是枚举的组合框中选择一个值 我使用的教程是 http www c sharpcorner com uploadfile dpatra combobox in datagrid in wpf h
  • 具有白色背景的组合框 DropDownList 样式

    我想要一个不可编辑的组合框 但仍然显示白色背景颜色 因此它的样式有效地类似于默认的组合框样式 DropDown ComboBoxStyle DropDownList 仅提供标准的 禁用 灰色背景色 简单地设置 BackColor Color
  • 如何动态更新 ttk.combobox?

    我正在 Windows 8 计算机上使用 Python 3 4 和 Tkinter 创建 GUI GUI 顶部有一些条目输入 然后是一些组合框 我希望组合框从先前输入描述的文本文件中获取选项列表 文件名 找到必要信息的行 分隔符类型等 我正
  • 如何删除控制器ExtJS?

    我在应用程序中动态创建控制器 如下所示 var loadedController me app getController controller name loadedController init 使用后如何删除该控制器 谢谢 ExtJs
  • 组合框下拉位置

    我有一个最大化的表单 其中包含 500px 的组合框控件 停靠在右上角 Width 尝试打开组合框后 列表的一半超出了屏幕 如何强制列表显示在表单中 棘手的问题 我找不到解决这个问题的好办法 只是一个解决方法 添加一个新类并粘贴如下所示的代
  • Sencha Touch Uncaught typeError:未定义不是函数

    我最近开始检查 Sencha Touch 在遵循教程时 我遇到了一些我似乎无法解决的问题 sencha 提供的 app js 中的一些基本代码运行良好 其他人似乎会出错 例如 new Ext application name NotesAp
  • 在 WPF 中以编程方式设置 ComboBox SelectedItem (3.5sp1)

    在安装了 Net Framework 3 5 sp1 的 wpf 应用程序中以编程方式设置 SelectedItem 时 我感到很困惑 我仔细阅读了数百篇文章 主题 但仍然感到困惑 我的xaml
  • ExtJS4:从 Ext.Application 访问全局变量

    我想加载一些应用程序特定的设置 并在加载应用程序时将它们保存为全局变量 我找到了如何创建和访问全局变量here https stackoverflow com questions 11615277 setting and accessing
  • C# - 如何防止组合框中的鼠标滚轮滚动?

    我有一个组合框 我想阻止用户使用鼠标滚轮滚动项目 有没有简单的方法可以做到这一点 C VS2008 Use the 鼠标滚轮 http msdn microsoft com en us library system windows form
  • Python Tkinter 在 GUI 中嵌入 Matplotlib

    我正在尝试将绘图嵌入到用 Python 编码的 Tkinter GUI 中 我相信下面的代码成功地将图形放入画布中 但我无法控制 GUI 网格中的画布位置 我希望能够将 GUI 的一部分作为情节 而不是全部 我怎样才能定位这个画布小部件 u

随机推荐