데이터 찾아가기 (IFindingData)

개요

  • 프로그램 A에서 프로그램 B를 실행하고 특정 데이터를 찾아가는 기능 구현 가이드

  • BaseForm.OpenFormByTab 메서드로 특정 프로그램을 실행하고 메서드의 반환 값을 IFindingData 인터페이스 형식으로 캐스팅하여 GoToData 메서드를 호출

Guide

폼 실행 <From>

  • OpenFormByTab 메서드를 호출하여 반환 값을 IFindingData 인터페이스 형식으로 캐스팅하고 GoToData 메서드를 호출

  • 아래 코드는 Grid의 행을 더블 클릭하면 [공지사항] 메뉴를 실행하는 예시

private void GridView_DoubleClick(object sender, EventArgs e)
{
    var gridView = sender as GridView;

    DevExpress.Utils.DXMouseEventArgs dxMouseEventArgs = e as DevExpress.Utils.DXMouseEventArgs;
    DevExpress.XtraGrid.Views.Grid.ViewInfo.GridHitInfo hitInfo = gridView.CalcHitInfo(dxMouseEventArgs.Location);

    if (!hitInfo.InRow || hitInfo.RowHandle < 0 || hitInfo.Column == null) 
        return;

    if (gridView.Equals(gvwNotice))
    {
        string datnum = gridView.GetRowCellValue(hitInfo.RowHandle, "datnum")?.ToString() ?? string.Empty;
        string recdt = gridView.GetRowCellValue(hitInfo.RowHandle, "recdt")?.ToString() ?? string.Empty;
        
        BaseForm form = OpenFormByTab("CM_A0000", null, false);

        // 전달할 파라미터 (0: 현재 폼ID, 1: 키 값(datnum), 2: 작성일(recdt))
        var paramValues = new object[]
        {
            FormId,
            datnum,
            recdt
        };

        (form as IFindingData)?.GoToData(paramValues);
    }
}

실행된 폼 <To>

  • IFindingData 인터페이스를 상속받아 GoToData 메서드를 구현

  • 아래 코드는 전달받은 파라미터를 참조하여 검색 결과로부터 FindRow로 찾을 데이터가 조회될 수 있도록 조회 조건의 기간을 수정하고 RetrieveHelper.SetValueToFindRow 메서드로 찾을 데이터의 키 값(datnum)을 세팅

public partial class CM_A0000 : BaseForm, IFindingData
{
    ...
    
    public bool GoToData(params object[] args)
    {
        if ((args?.Length ?? 0) == 0)
            return false;
            
        string fromFormId = args.ElementAtOrDefault(0)?.ToString();
        string datnum = args.ElementAtOrDefault(1)?.ToString();
        string recdt = args.ElementAtOrDefault(2)?.ToString();

        string beforeFromDate = ymdFrdt.yyyyMMdd;
        string beforeToDate = ymdTodt.yyyyMMdd;

        // 조건 초기화
        InitControlsRecursive(grpTop);

        // 시작일 설정
        if (beforeFromDate.CompareTo(recdt) == 1)
        {
            ymdFrdt.EditValue = recdt;
        }
        else
        {
            ymdFrdt.EditValue = beforeFromDate;
        }

        // 종료일 설정
        if (beforeToDate.CompareTo(recdt) == -1)
        {
            ymdTodt.EditValue = recdt;
        }
        else
        {
            ymdTodt.EditValue = beforeToDate;
        }

        // 필수 입력 필드 초기화
        radPublish_yn.EditValue = "%";

        if (datnum != null)
        {
            RetrieveHelper.SetValueToFindRow(gvwList, datnum);
            ClickRetrieveButton();
            return true;
        }
        else
        {
            return false;
        }
    }
        
    ...
}

Last updated