CommentHelper

정의

  • 네임스페이스: GST.PlusWin6.Core.Library

  • 어셈블리: GST.PlusWin6.Core.dll

설명

  • [이미지 1]과 같이 폼에 Grid 형식의 코멘트 관리 기능을 구현할 경우 반복되는 코드를 일반화하여 간편하게 구현할 수 있도록 지원하는 클래스

  • GridView에 GridColumn은 직접 디자인 필요

  • FieldName: 작성일(recdt), 작성자(insert_userid), 코멘트(comment)

[이미지 1]

데이터베이스 변경 사항

구분
이전
변경

테이블

sysHomeComment

sysFormComments

저장 프로시저

P_sysHomeComment_Q

sys_sel_comments

저장 프로시저

P_sysHomeComment_S

sys_sav_comments

Method

AddViewItem

  • 코멘트용 GridView 개체와 sysFormComments 테이블의 관리 항목 필드인 폼ID ('form_id'), 테이블ID ('table_id') 기준 정보를 매핑

  • Parameters

    • GridView view : CommentHelper 기능을 사용할 GridView 타입 개체

    • string formId : 해당 GridView로 처리되는 코멘트 데이터의 'form_id' 필드 값

    • string tableId : 해당 GridView로 처리되는 코멘트 데이터의 'table_id' 필드 값

public void AddViewItem(GridView view, string formId, string tableId);

Retrieve

  • 데이터 조회

  • 파라미터 'view'의 GridControl.DataSource에 결과를 바로 바인딩

public ResultSet Retrieve(GridView view, string orgdiv, string refKey);

SaveData

  • 데이터 저장

public bool SaveData(GridView view, string orgdiv, string refKey);

public bool SaveData(GridView view, string orgdiv, string refKey, out ResultSet resultSet);

AddRow

  • GridView에 새로운 행을 추가

  • 작성일 필드('recdt')에 사용자 PC의 현재 일자 세팅

  • 작성자 필드('insert_userid')에 현재 로그인한 사용자 ID 세팅

public DataRow AddRow(GridView view);

DeleteRow

  • GridView에 선택한 행을 제거

  • 작성자 필드에 저장된 ID와 현재 로그인한 사용자 ID를 비교하여 다를 경우 경고 메시지 팝업

  • Messages.DeleteOnlyCreator ("작성자만 삭제할 수 있습니다.")

public bool DeleteRow(GridView view);

GridView_ValidatingEditor

  • 작성자 필드에 저장된 ID와 현재 로그인한 사용자 ID가 다를 경우 데이터 수정 시 경고 처리용 이벤트 핸들러

  • Messages.ModifyOnlyCreator ("작성자만 수정할 수 있습니다.")

public void GridView_ValidatingEditor(object sender, BaseContainerValidateEditorEventArgs e);

CommentHelper를 사용하여 코멘트 기능 구현 절차

예제 코드들은 BaseForm (namespace GST.PlusWin6.Core.Forms)을 상속받은 코드를 기준으로 작성됨

1. GridView 설정

  • CommentHelper.AddViewItem 메서드로 GridView를 등록

  • GridView.ValidatingEditor 이벤트에 CommentHelper.GridView_ValidatingEditor 이벤트 핸들러 연결

public SY_A0010(params object[] args) : base(ref args)
{
    InitializeComponent();
    ...
    
    grpComment.CustomButtonClick += GroupControl_CustomButtonClick;
    ...
    
    CommentHelper.AddViewItem(gvwComment, FormId, "comCodeGroup");
    gvwComment.ValidatingEditor += CommentHelper.GridView_ValidatingEditor;
    
    ...
}

2. 코멘트 데이터 조회 기능 구현

  • CommentHelper.Retrieve 메서드로 데이터 조회 및 바인딩

public override void FocusedRowChanged(ColumnView view)
{
    if (view.Equals(gvwList))
    {
        if (view.RowCount > 0 && view.FocusedRowHandle >= 0)
        {
            if (!RetrieveHelper.IsFindingRowHandle(view))
            {
                FillValuesFromReferenceControl(grpMaster, grdList);
                CommentHelper.Retrieve(gvwComment, string.Empty, gvwList.GetFocusedRowCellValue("group_code")?.ToString());
                Retrieve("detail");
            }
        }
        else
        {
            InitControlsRecursive(grpMaster);
            InitControlsRecursive(grpComment);
        }

        SetReadOnlyRecursive(txtGroupCode, true);
        AttachmentHelper.AcceptChanges();
    }
}

3. GroupControl 버튼 클릭 이벤트 구현

  • 행 추가 (CommentHelper.AddRow)

  • 행 삭제 (CommentHelper.DeleteRow)

  • 저장 (CommentHelper.SaveData)

private void GroupControl_CustomButtonClick(object sender, DevExpress.XtraBars.Docking2010.BaseButtonEventArgs e)
{
    (sender as Control)?.Focus();
    string tagValue = e.Button?.Properties?.Tag?.ToString() ?? string.Empty;
    
    if (sender.Equals(grpComment))
    {
        if (tagValue.Equals("add"))
        {
            CommentHelper.AddRow(gvwComment);
        }
        else if (tagValue.Equals("remove"))
        {
            CommentHelper.DeleteRow(gvwComment);
        }
        else if (tagValue.Equals("save"))
        {
            // 신규 입력상태 체크
            if (!txtGroupCode.ReadOnly)
            {
                MessageForm.Show(Messages.AfterSavingNewDataCanRegisterComments);
                return;
            }
            // 읽기 전용이면서 값이 비어있으면 조회되지 않은 상태
            else if (string.IsNullOrEmpty(txtGroupCode.Text))
            {
                MessageForm.Show(Messages.NoDataRetrieved);
                return;
            }

            string groupCode = gvwList.GetFocusedRowCellValue("group_code")?.ToString();

            if (CommentHelper.SaveData(gvwComment, string.Empty, groupCode))
                CommentHelper.Retrieve(gvwComment, string.Empty, groupCode);
        }
    }
}

Last updated