miniUI datagrid打开行内编辑时,下拉框控件显示的是id而不是text解决

1.前言

       在使用datagird,有时候会遇到需要使用行内编辑的情况,但是呢,有时候会遇到各种奇奇怪怪的问题,下面介绍主要介绍两个问题的解决办法:

      ①打开行内编辑时,下拉框(下拉树)控件显示的是id而不是text解决方式;

      ②行内编辑打开时,修改了内容,取消行内编辑后,修改的值没有显示在对应的列上,但点击保存后,对应列又显示的是修改后的值;

2.前端代码

<div id="datagrid1" class="mini-datagrid" style="width:700px;height:280px;" 
    url=".............."> 
    <div property="columns"> 
        <%--staffId列存的是员工id,通过renderer函数在加载完成后展示员工的姓名--%>
        <div field="staffId" width="120" headerAlign="center" allowSort="true"    
           renderer="onStaffNameRenderer" >
            <input id="treeselect_staff" class="mini-treeselect" style="width:100%"             
               url="......"  textfield="text" valuefield="id" parentfield="pid">
        </div>
    </div>
</div>

<%--员工姓名解析--%>
function onStaffNameRenderer(e){
    return e.record.staffName;
}

<%--打开行内编辑方法--%>
function OpenEdit(){
    var grid = mini.get("datagrid1");
    var rows = grid.getSelecteds();
    for(var i=0;i<rows.length;i++){
        grid.beginEditRow(rows[i]);
    }
}

<%--关闭行内编辑方法--%>
function endEditRow(){
    var grid = mini.get("datagrid1");
    var rows = grid.getSelecteds();
    for(var i=0;i<rows.length;i++){
        grid.commitEditRow(rows[i]);
    }
}

3.问题①解决

         下拉树要求展示的是员工姓名,但是当我通过打开行内编辑后,发现下拉树显示的是员工的id,查看源码后发现,原来调用beginEditRow方法时,单元格编辑控件的值都来源于对应的单位格,什么意思呢,比如上述代码中,第一行的staffId列的值为123,当我打开第一行的行内编辑时,会将123赋值给员工下拉树,因此员工下拉树显示的是id 123,解决这个问题可重新对下拉树的text进行赋值,如下将打开行内编辑方法修改:

<%--打开行内编辑方法--%>
function OpenEdit(){
    var grid = mini.get("datagrid1");
    var rows = grid.getSelecteds();
    for(var i=0;i<rows.length;i++){
        grid.beginEditRow(rows[i]);
        <%--获取员工列--%>
        var column = grid.getColumn(0);
        <%--根据行和列获取指定的编辑器--%>
        var editor = grid.getCellEditor(column,rows[i]);
        <%--对编辑器的text重新进行赋值--%>
        editor.text = rows[i].staffName;<%--此处可在列表查询sql中查询出staffName供此处进行使用--%>
    }
}

4.问题②解决

       首先要知道当未执行 grid.commitEditRow(rows[i])时,在员工下拉树里面做的更改是不会更新到grid的编辑行上的指定列上,初始化第一行员工列的值为123,通过renderer解析得到的员工名称为May,行内编辑,重新选择了下拉框中其他员工,在我未执行grid.commitEditRow(rows[i])前,第一行员工列的值都是123;

      执行commitEditRow时,会去更新row[i]的value值,但员工类存的是员工id,显示的是员工名称,此时id被更新为新的,但员工名称还是旧的,因此会出现取消行内编辑后,修改的值没有显示在对应的列上,但点击保存后,对应列又显示的是修改后的值(因为保存后重新查询了),因此解决这个问题可以在取消行内编辑方法中手动的对员工名称进行赋值,如下:

<%--关闭行内编辑方法--%>
function endEditRow(){
    var grid = mini.get("datagrid1");
    var rows = grid.getSelecteds();
    for(var i=0;i<rows.length;i++){
        <%--获取员工列--%>
        var column = grid.getColumn(0);
        <%--根据行和列获取指定的编辑器--%>
        var editor = grid.getCellEditor(column,rows[i]);
        <%--手动将下拉树编辑后的text赋值给staffName--%>
        rows[i].staffName = editor.text;
        grid.commitEditRow(rows[i]);
    }
}

3.知识点总结

        1、调用beginEditRow方法时,单元格的值会赋值给其下的编辑控件;若单位格存的是名称,则编辑控件显示的也是名称,若存的是id,则控件也显示的是id;

        2、打开行内编辑后,执行commitEditRow方法前,编辑控件的修改不会更新到对应的单元格的值上;

在 JeeCG Datagrid 中双击行进行编辑,可以使用 EasyUI 的 ComboGrid 组件来实现下拉框多选。 首先,在需要进行多选的列中使用 ComboGrid 组件,例如: ``` {field:'city',title:'City',width:80,editor:{ type:'combogrid', options:{ panelWidth:400, idField:'id', textField:'text', url:'get_cities.php', multiple:true, columns:[[ {field:'id',title:'ID',width:60}, {field:'text',title:'City Name',width:120}, {field:'country',title:'Country',width:100} ]] } }} ``` 在上面的代码中,我们将一个名为 `city` 的列使用了 ComboGrid 组件,并设置了 `multiple:true` 以启用多选功能。同,我们也设置了 ComboGrid 组件的 `url` 属性来指定获取下拉框选项的数据源。 接下来,我们需要编写 `get_cities.php` 文件来获取下拉框选项的数据源。在这个文件中,我们可以使用 PHP 代码从数据库中获取城市列表,然后将其以 JSON 格式返回给前端页面。 示例代码: ```php <?php $host = 'localhost'; $user = 'root'; $pass = 'password'; $dbname = 'test'; // Connect to database $conn = mysqli_connect($host, $user, $pass, $dbname); if (!$conn) { die('Could not connect: ' . mysqli_error()); } // Retrieve city list from database $result = mysqli_query($conn, 'SELECT * FROM cities'); // Convert result to JSON format $rows = array(); while ($r = mysqli_fetch_assoc($result)) { $rows[] = $r; } echo json_encode($rows); // Close database connection mysqli_close($conn); ?> ``` 在上面的 PHP 代码中,我们首先连接到数据库,然后从 `cities` 表中获取城市列表,并将其转换为 JSON 格式返回给前端页面。最后,我们关闭数据库连接。 当用户在 JeeCG Datagrid 中双击行进行编辑,会弹出一个下拉框供用户选择。用户可以通过在下拉框中进行搜索或直接选择多个选项来完成多选操作。用户选择的选项会以逗号分隔的字符串形式保存在 JeeCG Datagrid 中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值