태그 보관물: C#

C# ReportViewer 매개 변수 값 전달

개요

ReportViewer 는 .NET framework 기반에서 사용할 수 있는 보고서 컨트롤 입니다. 비주얼 스튜디오에 내장되어 있습니다. ReportViewer 를 이용해서 여러가지 형식의 보고서를 손쉽게 만들 수 있습니다. 크리스탈 리포트(Crystal Reports) 같은 기능을 한다고 생각하시면 됩니다. ReportViewer 매개 변수 값 전달 방법을 알아보도록 하겠습니다.

보고서로 매개 변수 값 전달

사용자의 입력사항이나 다른 정보를 보고서에 출력해야 하는 경우가 있습니다. 이런 값을 파라미터로 보고서에 전달해서 출력하는 방법을 알아보도록 하겠습니다. WinForm 기준으로 진행해 보도록 하겠습니다.

프로젝트를 생성하고 보고서 파일을 추가합니다.

보고서 파일 추가

보고서 파일 추가

보고서 파일을 열고 도구상자 창을 확인하면 보고서 항목이 나타납니다.

도구 상자의 보고서 항목

도구 상자의 보고서 항목

보고서 항목을 이용하여 보고서를 디자인 합니다. 예제에서는 어떤 수업을 진행한 내역을 출력하는 보고서를 디자인 한다고 가정하고 진행합니다.

입력란, 테이블을 선택해서 다음과 같이 보고서를 디자인 합니다. 항목 중 @tbName 이라는 것이 있는데 이것이 바로 값을 전달할 수 있게 해주는 매개변수 입니다. 보고서 데이터 창을 띄워 보면 매개변수 항목이 있습니다(보고서 데이터 창 메뉴를 찾을 수 없으면 Crtl+Alt+D 키를 누릅니다).

매개변수 항목

매개변수 항목

매개 변수를 선택하고 오른쪽 마우스 버튼을 클릭하면 [매개 변수 추가…] 메뉴가 나타납니다. 선택하면 다음과 같은 대화 상자가 나타납니다.

매개 변수 추가 대화 상자

매개 변수 추가 대화 상자

이름을 용도에 맞게 입력하고 데이터 형식이나 나머지 사항을 선택합니다. 그러면 매개 변수 폴더에 추가 됩니다. 추가된 매개변수 항목을 드래그 하여 보고서의 출력하고자 하는 위치에 놓습니다. 매개 변수의 값을 전달하는 코드는 다음과 같습니다.

printPreview.LocalReport.ReportEmbeddedResource = "ReportTest.Report3.rdlc";
printPreview.ProcessingMode = ProcessingMode.Local;

var reportParameter = new ReportParameter[1];
reportParameter[0] = new ReportParameter("tbName", "성명 : 홍길동");
printPreview.LocalReport.SetParameters(reportParameter);

var reportParameter = new ReportParameterCollection();
reportParameter.Add(new ReportParameter("tbName", "성명 : 홍길동"));
printPreview.LocalReport.SetParameters(reportParameter);

printPreview.LocalReport.Refresh();

printPreview.RefreshReport();

ReportViewer Control 의 이름은 printPreview이고 보고서 파일의 이름은 Report3.rdlc 입니다. 매개 변수에 값을 넘겨주는 방식은 두 가지가 있는데 편리하다고 생각하는 방식을 사용하면 됩니다. 4~6 행은 ReportParameter를 배열 형태로 정의해서 넘기는 방식입니다. 8~9 행은 ReportParameterCollection에 ReportParameter 항목을 추가해서 넘기는 방식입니다. 프로그램 실행 결과 화면은 다음과 같습니다.

전달된 매개 변수 값 출력

전달된 매개 변수 값 출력

존재하지 않는 매개 변수 이름을 지정하면 오류가 발생합니다. 테스트로 tbName2 로 변경하고 실행해 보면 다음과 같은 오류가 발생합니다. “이 보고서에 정의되지 않은 보고서 매개 변수 ‘tbName2’을(를) 설정하려고 했습니다.”

매개 변수 이름 불일치 오류

매개 변수 이름 불일치 오류

보고서 디자인 작업시 여러가지 항목을 마우스를 이용하여 원하는 위치에 놓기 어려운 경우가 있는데 Crtl 키를 누른 상태에서 커서키를 누르면 미세하게 조정할 수 있습니다. 속성에서 숫자를 직접 입력해서 위치를 지정할 수도 있습니다.

이번 포스트에서는 보고서의 매개 변수에 값을 전달하는 방법을 알아보았습니다.

C# 트레이(Tray) 아이콘 표시 프로그램 만들기

개요

프로그램 중 계속 화면을 보여줄 필요는 없지만 여러가지 알림을 사용자에게 주어야 할 경우가 있습니다. 이런 경우 프로그램을 트레이(Tray) 아이콘 형태로 실행되도록 하면 됩니다.

트레이(Tray) 아이콘 구현

트레이(Tray) 아이콘은 작업표시줄 오른쪽에 있는 것을 지칭합니다. 이런식으로 동작하는 프로그램이 적어도 하나이상은 설치되어 있을 것입니다.

이 기능은 NotifyIcon 컨트롤을 사용해서 구현할 수 있습니다.

Visual Studio 에서 WinForm 프로젝트를 새로 생성하면 도구상자에서 다음과 같이 NotifyIcon 컨트롤을 확인할 수 있습니다.

NotifyIcon 컨트롤

NotifyIcon 컨트롤

Form에 NotifyIcon 컨트롤을 추가하고 속성을 보면 다음과 같은 항목을 확인할 수 있습니다.

IconNotify 컨트롤 속성

IconNotify 컨트롤 속성

Icon은 사용하고자 하는 파일을 지정하면 됩니다. ContextMenuStrip 항목은 마우스 우측 버튼을 클릭했을 때 나타나는 메뉴를 관리할 때 사용됩니다. 이미 cmsTrayMenu 라는 이름으로 추가해 둔 상태입니다. 다음과 같이 메뉴 및 도구 모음 하위에 있는 ContextMenuStrip 컨트롤을 추가하면 됩니다.

ContextMenuStrip 컨트롤

ContextMenuStrip 컨트롤

추가된 ContextMenuStrip 컨트롤의 속성을 편집해서 원하는 메뉴를 추가합니다. 예제에서는 간단하게 보기, 종료 메뉴만 추가했습니다.

추가된 메뉴

추가된 메뉴

각 메뉴와 Form 이벤트에 연결된 소스를 보도록 하겠습니다.

private void ToolStripMenuItemShow_Click(object sender, EventArgs e)
{
	loadSendData();
	this.Show();
}

private void ToolStripMenuItemExit_Click(object sender, EventArgs e)
{
	Application.Exit();
}

private void notifyIcon_MouseDoubleClick(object sender, MouseEventArgs e)
{
	this.Show();
}

private void MainForm_Move(object sender, EventArgs e)
{
	if (this.WindowState == FormWindowState.Minimized)
	{
		this.Hide();
	}
}

private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
{
	if (e.CloseReason == CloseReason.UserClosing)
	{
		notifyIcon.Visible = true;
		this.Hide();
		e.Cancel = true;
	}
}

4행은 보기 항목을 클릭하면 현재 Form을 Show() 메소드를 호출하도록 합니다.

9행은 종료 항목을 클릭하면 프로그램을 종료하도록 합니다.

14행은 트레이 아이콘을 더블클릭했을 경우 4행과 동일하게 Show() 메소드를 호출하도록 합니다. 없어도 되지만 사용자 편의를 위하여 추가해 보았습니다.

19~22행은 사용자가 Form을 최소화 상태로 했을 때 Form을 숨기는 역할을 합니다.

29~31행은 Form의 종료아이콘을 클릭했을 때 종료가 되지 않고 숨긴 후 종료 이벤트가 중지되도록 하는 역할을 합니다.

알림기능 추가

이번에는 사용자에게 알림을 주는 방법을 알아보도록 하겠습니다. 여러가지 상황이 있겠지만 이번 포스트에서는 지정된 DB를 일정시간 간격으로 검색해서 새로운 자료 도착여부를 알려주는 것으로 하겠습니다.

주기적으로 확인하는 부분에 다음과 같이 구현합니다.

var newData = new NewData();

var notViewDataCount = newData.GetNotViewCount();

if (notViewDataCount > 0)
{
	notifyIcon.ShowBalloonTip(2000, "알림", notViewDataCount + "건의 자료가 전송되었습니다.", ToolTipIcon.Info);
}

알림 메시지를 출력하려면 7행과 같이 ShowBalloonTip 메소드를 사용하면 됩니다. 메소드의 설명은 다음의 주소에서 확인하실 수 있습니다.

NotifyIcon.ShowBalloonTip 메서드

실제로 동작하게 되면 알림메시지 영역에 지정한 메시지가 나타나게 됩니다.

이번 포스트에서는 트레이(Tray) 아이콘 표시 프로그램 만들기 에 대해서 알아보았습니다.