jQuery MiniUI

 找回密码
 立即注册
查看: 9225|回复: 12
打印 上一主题 下一主题

关于datagrid编辑的两个问题请求帮助 [复制链接]

Rank: 2

跳转到指定楼层
楼主
发表于 2017-6-21 14:06:23 |只看该作者 |倒序浏览
本帖最后由 zghkbl 于 2017-6-21 14:08 编辑


现有两个问题请求帮助:
1、图一货号列field="Goods_Number"输入或者通过onButtonEdit选择数据后,需要使批次列 field="Goods_Batch"动态加载数据,也就是url加的货号的值。
2、图二中,我做了回车事件的判断,如果在报表的最后一行并且最的一列按下回车键,就自动创建一个空行。
图二功能碰到的问题是,按下回车键成功创建行后,输入焦点不在第一列,而是跑第二列去了。
相关代码:
function onButtonEdit(e) {
    var btnEdit = this;
    mini.open({
        url: "/Seller/Goods/SelectGoods",
        title: "选择列表",
        width: 800,
        height: 600,
        ondestroy: function (action) {
            if (action == "ok") {
                var iframe = this.getIFrameEl();
                var data = iframe.contentWindow.GetSelectData();
                data = mini.clone(data);    //必须
                if (data) {
                    btnEdit.setValue(data.Goods_Number);
                    btnEdit.setText(data.Goods_Number);
                    SetSelectRow(e,data);
                }
            }
        }
    });
}

//新增一行
        function addRow() {
            var newRow = { Quantity: 1 };
            datagrid1.addRow(newRow);
            datagrid1.beginEditCell(newRow, "Goods_Number");
        }

//按回车键触发
        function onCelleditEnter(e) {
            if (e.column.field == 'Other') {
                if ((datagrid1.indexOf(e.record) + 1) == e.sender.data.length) {
                    addRow();//此处不知怎么解决国二的问题
                }
            }
            if (e.column.field == 'Goods_Number') {
            }
        }
        //选择信息后写值
        function SetSelectRow(e, values) {
            values.Unit_Price = values.Buy_Price;
            values.Subtotal_Price = values.Buy_Price;
            var batch = undefined;
            $.get("@(ViewBag.PublicArea)Goods_Stock/SumBatchStock", { strWhere: " Store_Number='" + Store_Number.getValue() + "' and Goods_Number='" + values.Goods_Number + "'" }, function(data) {
                batch = mini.clone(data);
                if (batch) {
                    values.Goods_Batch = batch;
                   console.log(e);
                }
            });
            //不知在这个方法中如何写图一的功能
            datagrid1.updateRow(datagrid1.getEditorOwnerRow(e.sender), values);
        }

Rank: 8Rank: 8

沙发
发表于 2017-6-21 18:36:24 |只看该作者
1 grid.on("cellbeginedit",function(e){
       if(e.field=="Goods_Batch"){
                var url=e.editor.url+e.record.Goods_Number; //这里可以拼接url,不太明白你说的url加的货号的值是什么意思。
                 e.editor.setUrl(url)
       }
  })
2  请提供完整html代码来分析。datagrid1.beginEditCell(newRow, "Goods_Number"); 第二个参数是列的name,对应了吗?

Rank: 2

板凳
发表于 2017-6-21 23:02:21 |只看该作者
本帖最后由 zghkbl 于 2017-6-21 23:08 编辑
felt 发表于 2017-6-21 18:36
1 grid.on("cellbeginedit",function(e){
       if(e.field=="Goods_Batch"){
                var url=e. ...

续问题一、按照老师的方法,第一行的editor取得的什么数据,后边增加的所有行就自带了与第一行相同的数据.获取的新数据也不会替换自带的的数据。。

Rank: 2

地板
发表于 2017-6-21 23:07:26 |只看该作者
felt 发表于 2017-6-21 18:36
1 grid.on("cellbeginedit",function(e){
       if(e.field=="Goods_Batch"){
                var url=e. ...

继问题二的完整代码:
<div id="datagrid1" class="mini-datagrid" style="width: 100%; height: 100%;" url="@(ViewBag.PublicUrl)Init" virtualScroll="true" showColumnsMenu="true" showPager="false" showSortIcon="true" allowResize="true" sortField="Id" sortOrder="asc" allowCellEdit="true" allowCellSelect="true" editNextOnEnterKey="true" navEditMode="true" allowCellValid="true" multiSelect="true" contextMenu="#rightMenu" showSummaryRow="true" ondrawsummarycell="onSumRow" oncellcommitedit="onCellCommitEdit" oncelleditenter="onCelleditEnter" >
                <div property="columns">
                    <div field="Index" type="indexcolumn" width="30" headerAlign="center" align="center" allowSort="true">序号</div>
                    <div field="Goods_Number" name="Goods_Number" displayField="Goods_Number" width="100" headerAlign="center" allowSort="true">
                        货号<input property="editor" class="mini-buttonedit" onbuttonclick="onButtonEdit" style="width: 100%;"/>
                    </div>
                    <div field="Goods_Barcode" name="Goods_Barcode" width="100" headerAlign="center" allowSort="true">
                        条码
                    </div>
                    <div field="Goods_Name" name="Goods_Name" width="150" headerAlign="center" allowSort="true">名称</div>
                    <div field="Goods_Spec" name="Goods_Spec" width="100" headerAlign="center" allowSort="true">规格</div>
                    <div field="Unit_Number" name="Unit_Number" width="40" headerAlign="center" align="center" allowSort="true">单位</div>
                    <div field="Buy_Price" name="Buy_Price" width="100" headerAlign="center" align="right" allowSort="true">进货价</div>
                    <div field="Quantity" name="Quantity" width="60" headerAlign="center" align="right" allowSort="true" summaryType="sum" vtype="float" type="decimalPlaces" numberFormat="n">
                        数量<input property="editor" class="mini-textbox" style="width: 100%;"/>
                    </div>
                    <div field="Unit_Price" name="Unit_Price" width="60" headerAlign="center" align="right"  allowSort="true" vtype="float" type="decimalPlaces" numberFormat="n">
                        单价<input property="editor" class="mini-textbox" style="width: 100%;"/>
                    </div>
                    <div field="Subtotal_Price" name="Subtotal_Price" width="60" headerAlign="center" align="right"  allowSort="true" summaryType="sum" vtype="float" type="decimalPlaces" numberFormat="n">
                        金额<input property="editor" class="mini-textbox" style="width: 100%;"/>
                    </div>
                    <div field="Goods_Batch" name="Goods_Batch" displayField="Goods_Batch" width="100" headerAlign="center" allowSort="true">
                        批次<input property="editor" class="mini-combobox" textField="Goods_Batch" valueField="Goods_Batch" pinyinField="Goods_Batch" allowInput="true" style="width: 100%;"/>
                    </div>
                    <div field="Express_OddNumber" name="Express_OddNumber" width="100" headerAlign="center" allowSort="true">
                        运单号<input property="editor" class="mini-textbox" style="width: 100%;"/>
                    </div>
                    <div field="Memo" name="Memo" width="150" headerAlign="center" allowSort="true">
                        备注<input property="editor" class="mini-textbox" style="width: 100%;"/>
                    </div>
                    <div field="Other" name="Other" width="150" headerAlign="center" allowSort="true">
                        其它<input property="editor" class="mini-textbox" style="width: 100%;"/>
                    </div>
                </div>
            </div>
<script type="text/javascript">
var datagrid1 = mini.get("datagrid1");
//新增一行
        function addRow() {
            var newRow = { Quantity: 1 };
            datagrid1.addRow(newRow);
            datagrid1.beginEditCell(newRow, "Goods_Number");
        }

//按回车键触发
        function onCelleditEnter(e) {
            if (e.column.field == 'Other') {
                if ((datagrid1.indexOf(e.record) + 1) == e.sender.data.length) {
                    addRow();
                }
            }
            if (e.column.field == 'Goods_Number') {
            }
        }
</script>

Rank: 2

5#
发表于 2017-6-21 23:48:13 |只看该作者
felt 发表于 2017-6-21 18:36
1 grid.on("cellbeginedit",function(e){
       if(e.field=="Goods_Batch"){
                var url=e. ...

<div field="Goods_Number" name="Goods_Number" displayField="Goods_Number" width="100" headerAlign="center" allowSort="true">
                        货号<input property="editor" class="mini-buttonedit" onbuttonclick="onButtonEdit" style="width: 100%;"/>
                    </div>
function onButtonEdit(e){
请问能在本方法中取得field或name吗
}

Rank: 8Rank: 8

6#
发表于 2017-6-22 10:47:24 |只看该作者
zghkbl 发表于 2017-6-21 23:48
货号
                    
function onButtonEdit(e){

1  buttonedit编辑器的列,displayField需要和field不一样,也就是说你需要保存2个字段。
2  需要延时定位一下。
setTimeout(function(){
           datagrid1.beginEditCell(newRow, "Goods_Number");
        },100)
3  可以根据当前选中单元格来获取到column
  var  cell=grid.getCurrentCell()
  var column=cell[1];
  column.name ,column.field

Rank: 2

7#
发表于 2017-6-22 14:54:42 |只看该作者
dforce 发表于 2017-6-22 10:47
1  buttonedit编辑器的列,displayField需要和field不一样,也就是说你需要保存2个字段。
2  需要延时定 ...

追溯1、
<div field="Goods_Batch" name="Goods_Batch" displayField="Batch_Number" width="100" headerAlign="center" allowSort="true">
                        批次<input property="editor" class="mini-combobox" textField="Goods_Batch" valueField="Goods_Batch" pinyinField="Goods_Batch" allowInput="true" style="width: 100%;"/>
                    </div>
由上可见,displayField与Goods_Batch不一样,问题依然存在。
新增行的值还是和第一行相等。
datagrid1.on("cellbeginedit", function(e) {
            if (e.field == "Goods_Batch") {
                if (e.record.Goods_Number != undefined && e.record.Goods_Number != '') {
                    var url = "@(ViewBag.PublicArea)Goods_Stock/SumBatchStock?strWhere=isnull(Goods_Batch,'')!='' and Goods_Number='" + e.record.Goods_Number + "'"; //这里可以拼接url,不太明白你说的url加的货号的值是什么意思。
                    e.editor.setUrl(url);
                }
            }
        });

Rank: 2

8#
发表于 2017-6-22 15:03:30 |只看该作者
dforce 发表于 2017-6-22 10:47
1  buttonedit编辑器的列,displayField需要和field不一样,也就是说你需要保存2个字段。
2  需要延时定 ...

editor的mini-combobox有清空所有内容的的方法吗

Rank: 8Rank: 8

9#
发表于 2017-6-22 15:18:52 |只看该作者
zghkbl 发表于 2017-6-22 14:54
追溯1、

                        批次

如果不一样是不会你这样的问题,请提供完整页面重新问题,不要贴一段一段的代码,回复高级模式可以上传文件。
combobox.setData([])可以清空下拉数据。

Rank: 2

10#
发表于 2017-6-22 15:36:07 |只看该作者
zghkbl 发表于 2017-6-22 14:54
追溯1、

                        批次

完整代码已传附件

附件: 你需要登录才可以下载或查看附件。没有帐号?立即注册

Archiver|普加软件

GMT+8, 2025-7-10 10:01 , Processed in 1.067388 second(s), 11 queries .

Powered by Discuz! X2

© 2001-2011 Comsenz Inc.

回顶部