ax5ui / ax5ui-grid

Javascript UI Component - GRID ( Excel Grid, jqGrid, angularjs grid, jquery grid, SlickGrid, ag-grid gridify)
http://ax5.io/ax5ui-grid/demo/index.html
MIT License
99 stars 36 forks source link

그리드에서 특정 ROW의 Column 값을 변경하고 싶습니다. #7

Closed rcn408 closed 7 years ago

rcn408 commented 7 years ago

그리드에서 특정 행은 검색팝업을 오픈하여

팝업에서 선택된 데이터를 그리드에서 선택한 특정행열의 값을 변경할 수 있는지요?

팝업오픈해서 특정값을 callback처리 까지는 했는데.....

updateColumn 이건 아닌거 같은데....

방법을 없나요?

아 그리고 혹시 그리드내에 hidden Column은 없나요?...코드값같은 넘들은 보이지 않고 써야하는데..

감사합니다.

rcn408 commented 7 years ago

아...updateRow 와 $.extend 로 해결했습니다.

_this.target.updateRow($.extend({}, _this.target.list[_selthis.dindex], {data1: data.value}), _selthis.dindex);

이방법 말고 좀 더 우아한 방법은 없는지요^^;

그리고 hidden column은 columns[].width를 0으로 하면 일단은 보이지 않으나

컬럼 사이즈 조절을 하면 나오고 excel export해도 나오네요..^^

우아한 방법 부탁드립니다.

그리고 inline editor로 많이 해보려는데....

selectbox를 변경하면 특정 Column은 수정모드 활성화 등..체크박스나 selectbox등의

이벤트는 없는건지요? API에도 Event가 언급되지 않아서요

thomasJang commented 7 years ago
  1. 특정한 row의 키 값을 변경
  2. 히든컬럼 사용법
  3. 수정모드 활성화 여부 처리 방법

이 3가지가 질문의 요지 맞으신가요?

rcn408 commented 7 years ago
  1. updaterow 이외에 특정컬럼값 변경방법 여부 2.히든컬럼 3.ondatachange 시 특정컬럼 수정모드 활성화/비활성화 가능여부 요정도가 되겠네요
thomasJang commented 7 years ago

특정컬럼값 변경 (요건 기능을 추가개발했습니다.) http://ax5.io/ax5ui-grid/demo/16-cell-update.html

특정조건이면 인라인에디트 비활성(원래 있던 기능인데 문서에 내용이 없어 문서에 설명을 추가 했습니다.) http://ax5.io/ax5ui-grid/demo/17-inline-edit-disable.html

히든컬럼 (요건 좀 더 고민이 필요합니다. 이번버전에선 컬럼 히든 기능을 안 하려고 했었거든요.) 그리드의 컬럼의 다르게 출력되어야 하는 경우에

/**
 * gridView
 */
fnObj.gridView01 = axboot.viewExtend(axboot.gridView, {
    initView: function () {
        var _this = this;

        axboot.buttonClick(this, "data-grid-view-01-btn", {
            "config-column": function () {
                ACTIONS.dispatch(ACTIONS.GRID_01_COLUMN_CONTROL);
            }
        });
    },
    setGridBuilder: function (_data, userDataColumns) {
        if(userDataColumns){
            this.userDataColumns = userDataColumns;
        }

        var format_money = function (unit) {
            return function () {
                return ax5.util.number(this.value / unit, {"money": true});
            }
        };
        var columns;
        columns = [
            {key: "saleDate"},
            {key: "compCd"},
            {key: "compNm"},
            {key: "shopCd"},
            {key: "storNm"},
            {
                key: "", label: "POS전송건수", width: 80, align: "right", formatter: function () {
                return ax5.util.number(this.item.count + this.item.errorCount, {"return": "money"});
            }
            },
            {key: "count", label: "ASP수신건수", width: 80, align: "right"},
            {key: "errorCount", label: "오류건수", width: 80, align: "right"},
            {key: "sendFg"},
            {key: "totSaleAmt", formatter: format_money(_data.moneyUnit)},
            {key: "totDcAmt", formatter: format_money(_data.moneyUnit)},
            {key: "dcmSaleAmt", formatter: format_money(_data.moneyUnit)},
            {key: "supplyAmt", formatter: format_money(_data.moneyUnit)},

            {key: "vatAmt", formatter: format_money(_data.moneyUnit)},
            {key: "noTaxSaleAmt", formatter: format_money(_data.moneyUnit)},
            {key: "noTaxSaleVat", formatter: format_money(_data.moneyUnit)},
            {key: "rateDc", formatter: format_money(_data.moneyUnit)},
            {key: "notRateDc", formatter: format_money(_data.moneyUnit)},
            {key: "cashAmt", formatter: format_money(_data.moneyUnit)},
            {key: "crdCardAmt", formatter: format_money(_data.moneyUnit)},

            {key: "etcAmtSum", formatter: format_money(_data.moneyUnit)},
            {key: "returnTotAmt", formatter: format_money(_data.moneyUnit)},
            {
                key: "returnCount", label: "반품비율(%)", align: "center", formatter: function () {
                return (this.item.saleCount > 0) ? Math.round(this.item.returnCount / this.item.saleCount * 100) : (this.item.returnCount > 0) ? 100 : 0;
            }
            }
        ];

        var groupingBy = [];
        var groupingLabelColspan = 0;
        if (_data.secondGroup == "DAILY") {
            if (_data.firstGroup == "GROUP_BY_STORE") {
                groupingLabelColspan = 9;
                groupingBy = ["compNm", "storNm"];
            }
            else if (_data.firstGroup == "GROUP_BY_COMPANY") {
                groupingLabelColspan = 7;
                groupingBy = ["compNm"];
                columns.splice(3, 2);
            }
        }
        else {
            columns.shift();
            if (_data.firstGroup == "GROUP_BY_STORE") {
                groupingLabelColspan = 7;
                groupingBy = ["compNm", "storNm"];
                columns.splice(7, 1);
            }
            else if (_data.firstGroup == "GROUP_BY_COMPANY") {
                groupingLabelColspan = 5;
                groupingBy = ["compNm"];
                columns.splice(7, 1);
                columns.splice(2, 2);
            }
        }

        this.target = axboot.gridBuilder({
            showLineNumber: false,
            showRowSelector: false,
            frozenColumnIndex: 0,
            multipleSelect: true,
            target: $('[data-ax5grid="grid-view-01"]'),
            columns: columns,
            body: {
                onClick: function () {
                    if (_data.secondGroup == "DAILY" && _data.firstGroup == "GROUP_BY_STORE") {
                        this.self.select(this.dindex, {selectedClear: true});
                        ACTIONS.dispatch(ACTIONS.ITEM_CLICK, this.item);
                    }
                },
                grouping: {
                    by: groupingBy,
                    columns: [
                        {
                            label: function () {
                                return this.groupBy.labels.join(", ") + " 합계";
                            },
                            colspan: groupingLabelColspan, align: "center"
                        },
                        {key: "totSaleAmt", collector: "sum", formatter: format_money(_data.moneyUnit), align: "right"},
                        {key: "totDcAmt", collector: "sum", formatter: format_money(_data.moneyUnit), align: "right"},
                        {key: "dcmSaleAmt", collector: "sum", formatter: format_money(_data.moneyUnit), align: "right"},
                        {key: "supplyAmt", collector: "sum", formatter: format_money(_data.moneyUnit), align: "right"},

                        {key: "vatAmt", collector: "sum", formatter: format_money(_data.moneyUnit), align: "right"},
                        {key: "noTaxSaleAmt", collector: "sum", formatter: format_money(_data.moneyUnit), align: "right"},
                        {key: "noTaxSaleVat", collector: "sum", formatter: format_money(_data.moneyUnit), align: "right"},
                        {key: "rateDc", collector: "sum", formatter: format_money(_data.moneyUnit), align: "right"},
                        {key: "notRateDc", collector: "sum", formatter: format_money(_data.moneyUnit), align: "right"},
                        {key: "cashAmt", collector: "sum", formatter: format_money(_data.moneyUnit), align: "right"},
                        {key: "crdCardAmt", collector: "sum", formatter: format_money(_data.moneyUnit), align: "right"},

                        {key: "etcAmtSum", collector: "sum", formatter: format_money(_data.moneyUnit), align: "right"},
                        {key: "returnTotAmt", collector: "sum", formatter: format_money(_data.moneyUnit), align: "right"},
                        {key: "returnCount", collector: "sum", formatter: "money", align: "center"}
                    ]
                }
            },
            footSum: [
                [
                    {
                        label: "합계",
                        colspan: groupingLabelColspan, align: "center"
                    },
                    {key: "totSaleAmt", collector: "sum", formatter: format_money(_data.moneyUnit), align: "right"},
                    {key: "totDcAmt", collector: "sum", formatter: format_money(_data.moneyUnit), align: "right"},
                    {key: "dcmSaleAmt", collector: "sum", formatter: format_money(_data.moneyUnit), align: "right"},
                    {key: "supplyAmt", collector: "sum", formatter: format_money(_data.moneyUnit), align: "right"},

                    {key: "vatAmt", collector: "sum", formatter: format_money(_data.moneyUnit), align: "right"},
                    {key: "noTaxSaleAmt", collector: "sum", formatter: format_money(_data.moneyUnit), align: "right"},
                    {key: "noTaxSaleVat", collector: "sum", formatter: format_money(_data.moneyUnit), align: "right"},
                    {key: "rateDc", collector: "sum", formatter: format_money(_data.moneyUnit), align: "right"},
                    {key: "notRateDc", collector: "sum", formatter: format_money(_data.moneyUnit), align: "right"},
                    {key: "cashAmt", collector: "sum", formatter: format_money(_data.moneyUnit), align: "right"},
                    {key: "crdCardAmt", collector: "sum", formatter: format_money(_data.moneyUnit), align: "right"},

                    {key: "etcAmtSum", collector: "sum", formatter: format_money(_data.moneyUnit), align: "right"},
                    {key: "returnTotAmt", collector: "sum", formatter: format_money(_data.moneyUnit), align: "right"},
                    {key: "returnCount", collector: "sum", formatter: "money", align: "center"}
                ]
            ]
        });
    },
    getData: function (_type) {
        var list = [];
        var _list = this.target.getList(_type);

        if (_type == "modified" || _type == "deleted") {
            list = ax5.util.filter(_list, function () {
                delete this.deleted;
                return this.key;
            });
        } else {
            list = _list;
        }
        return list;
    }
});

이런식으로 그리드의 컬럼정보를 조건에 따라 다르게 처리하는게 더 확실 하겠다 싶었습니다. 하지만 역시나 hidden 컬럼에 대한 필요도 있는거겠다 싶어서. 고민을 좀 더 해보도록 하겠습니다.

rcn408 commented 7 years ago

감사합니다..^^ 주말시간에 많은 정보를 담아주셔서 너무나 감사합니다..^^