일반 패널에서 쓸때와 grid패널에서 쓸때가 살짝 차이가 있어서 두 가지로 정리해보겠다.

 

1. 일반

1
2
3
4
5
6
7
8
9
10
11
12
13
{
    xtype: 'datefield',
    name'record_dt',
    id : 'record_dt',
    emptyText: '등록일자',
    labelAlign : 'right',
    align : 'center',
    width : 130,
    format: 'Y-m-d',
    submitFormat:'Y-m-d',
    value: new Date("1980-01-01"), //디폴트 날짜 셋팅. 안하면 빈 값이다.
    renderer : Ext.util.Format.date(new Date(value), "Y-m-d"//표시되는 날짜 형식
}
cs

 

2. grid 패널

그리드패널은 조금 선언을 다르게 해줘야한다. 그리드의 데이터 컬럼 안에서 편집을 하는 것이기 때문에 editor로 선언해준다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
columns :[
    {
        header: '등록일자',
        dataIndex : 'record_dt',
        align : 'center',
        width : 100,
        readOnly : true,
        format: 'Y-m-d',
        submitFormat:'Y-m-d',
        editor: new fm.DateField({
             xtype: 'datefield',
             format: 'Y-m-d'
        }),
        renderer : Ext.util.Format.date(new Date(value), "Y-m-d")//표시되는 날짜 형식
    }
]
cs

그리드의 경우는 그리드데이터를 가져온다. 대신 쿼리에서 표시하고 싶은 형식을 맞춰 줘야한다.

record_dt컬럼의 데이터 타입이 varchar2라면 '2019-05-25'로 저장을 하거나 to_date(record_dt, 'YYYY-MM-DD')로 변환해서 가져온다. datetime으로 저장되어있다면 to_char(record_dt, 'YYYY-MM-DD')로 가져오는게 좋을 것 같다.

 

이리하여 끝이면 좋겠지만 여러분의 DB 테이블의 record_dt컬럼의 데이터 타입이 datetime이 아니고 string형(char나 varchar)이라면 조금 귀찮아진다. 

datefield는 선택된 날짜를 string형이 아닌 date타입으로 넘겨준다. 때문에 넘겨주기 전에 string형으로 바꿔주는 작업이 필요하다. 아래의 예제를 보면 두 가지 경우가 나와있는데 seachBtn은 일반적인 경우, saveGridRow는 그리드에서 넘어온 경우로 보면 된다. 둘 다 큰 차이 점은 없고 store의 파라미터로 셋팅을 해주냐 저장할 row데이터에 다시 값을 셋팅해주느냐 정도의 차이로 보면 된다. 필요한 부분을 보고 갖다 쓰시길.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
var controller = Ext.create('Ext.app.ViewController', {
     /**
     * 검색버튼 클릭
     */
     searchBtn : function(btn) {
        var store = storeList;
        var view = this.getView();
        var record_dt = view.down("[name=record_dt]").getValue(); //패널에 있는 record_dt값을 가져온다.
        
        var dt = new Date();
        var tmp_m, tmp_d, conv_date;
 
        dt = new Date(record_dt);
        tmp_m = dt.getMonth()+1;
        tmp_d = dt.getDate();
        conv_date = dt.getFullYear().toString() +(tmp_m >9?tmp_m:"0"+tmp_m.toString()) + (tmp_d>9?tmp_d:"0"+tmp_d.toString());
        record_dt = conv_date; //string형으로 변환
        
        store.getProxy().setExtraParam("record_dt",record_dt); //스토어 파라미터값에 셋팅
        store.removeAll();
        store.currentPage = 1;
        store.load(); //스토어 리로딩
     }
    ,/**
    * 저장
    */    
    saveGridRow : function(btn) {
        var grid = btn.up("grid");
        var store = btn.up("grid").getStore();
        var saveRow = grid.getSelection(); //변동이 있는 row 가져옴 ->저장대상
        
        if(saveRow.length > 0 ){
            for (var i = 0; i < saveRow.length; i++) {
                if( saveRow[i].data.record_dt != "" && saveRow[i].data.record_dt !=  undefined) {
                    var dt = new Date(saveRow[i].data.record_dt.toString());
                    var tmp_m = dt.getMonth()+1;
                    var tmp_d = dt.getDate();
                    var comp_date = dt.getFullYear() +"-" + (tmp_m >9?tmp_m:"0"+tmp_m) +"-" + (tmp_d>9?tmp_d:"0"+tmp_d);
 
                    saveRow[i].data.record_dt =  comp_date; //string형으로 변환된 값을 saveRow에 다시 셋팅
                }
            }
        }
        
    }
});
cs

 

+ Recent posts