싱크대 코브라 정수헤드

구매동기

기존에 쓰던 싱크대 코브라 헤드가 오래되어  청소를 해서 사용하려고 분리해 보았습니다. 물살이 세지 않아 헤드 안쪽에 뭔가 이물질이 있어서 그런것이 아닌가 추측되었습니다. 이리저리 보았는데 청소가 불가능하다는 결론을 내리게 되었습니다.

혹시나 해서 헤드를 분리하고 물이 나오도록 해 보았는데 수압이 생각보다는 강했습니다. 그래서 헤드를 바꾸면 물살이 강해질 것이라고 생각되었습니다.

상품선택

검색해 보니 기존에 쓰던 것과 비슷한 것이 저렴하게 판매되고 있었습니다. 거주하고 있는 건물이 오래되어 혹시 녹물이 섞여 나올 수 있을 가능성도 있을 것 같아 필터도 같이 구매할 생각으로 검색해 보았습니다. 그런데 코브라 헤드 안에 필터가 있는 제품이 있었습니다. 가격이 다른 제품에 비해서 비쌌습니다. 하지만 헤드와 필터를 따로 구매하는 것 보다는 경제적이어서 별 다른 고민없이 주문하게 되었습니다. 추가 필터도 같이 판매하고 있었는데 성능과 수질의 상태를 알 수 없어서 헤드와 안에 장착된 하나의 필터가 있는 제품만 구매했습니다.

제품구성

싱크대 코브라 정수헤드 제품 상자

싱크대 코브라 정수헤드 제품 상자

헤드안에 필터가 장착되어 있어 구성이 단순합니다.

상품 규격 설명

상품 규격 설명

재질이 플라스틱이어서 내부가 훤히 보입니다. 필터의 상태를 보고 교체 시기를 판단할 수 있어야 해서 투명하게 만든 것 같습니다.

제품 기능 설명

제품 기능 설명

물이 나오는 부분

물이 나오는 부분

물이 나오는 부분이 이전에 쓰던 것과는 다르게 미세한 구멍이 많이 있습니다.

헤드 전체 모습

헤드 전체 모습

위쪽의 흰 부분이 필터입니다. 위쪽이 나사식 마개로 되어 있어 교체할 수 있습니다. 아래쪽에는 물살이 나오는 형태를 세단계로 조절할 수 있는 스위치가 있습니다. 이미지 왼쪽 중간쯤 튀어나온 부분이 스위치 입니다.

위쪽 금속 연결 부분

위쪽 금속 연결 부분

위쪽 연결 부분은 금속 재질로 되어 있어 마모에 강할 것으로 생각됩니다.

실제 장착모습

실제 장착모습

실제 장착해 보니 약간 커 보이기는 하는데 깔끔함이 더 돋보입니다. 연결되는 수전부분도 바꾸면 좋을텐데 그러면 너무 일이 커져서 일단 헤드만 바꾸었습니다.

물이 나오는 모습

물이 나오는 모습

물을 틀어보니 사진과 같이 시원하게 나옵니다. 수압 상승 효과까지 있는것 같습니다. 기존의 헤드로는 절대 물이 갈수 없는 부분까지 물살이 도달했습니다. 싱크대 청소할 때도 많이 도움이 될 것 같았습니다.

필터효과

장착된 필터가 얼마나 기능을 하는지 궁금했습니다. 대략 3주 정도 사용한 상태인데 필터가  다행히 갈색으로 변하는 현상은 없었습니다. 물론 필터가 기능을 한다는 것을 전제로 한 것입니다. 갈색으로 변하지는 않지만 자세히 보니 위쪽부터 약간 검게 변하는 현상이 있었습니다. 사진상으로는 잘 나타나지 않았습니다. 수도물 자체는 깨끗하겠지만 여러 경로로 도달하다 보니 미세한 이물질이 조금씩 섞이는 것이 아닌가 생각되었습니다.

음식을 할 때 쓰는 물이 나오는 싱크대 헤드를 변경하고 필터가 동작하는 것을 확인하니 조금이나마 마음이 놓였습니다. 가격은 약간 비싸기는 했지만 만족하며 사용하고 있습니다. 상황을 봐서 추가 필터도 구매할 의사가 있습니다.

C# ReportViewer 2단 출력

개요

보고서에 자료를 출력할 때 열의 개수가 많지 않아 ReportViewer 2단 출력 을 하고 싶은 경우가 있습니다. 종이도 절약되고 보기도 좋게 출력됩니다. 그런데 이것이 어떻게 해야 하는지 알기가 어렵습니다. 이번 포스트에서는 자료를 2단으로 출력하는 방법을 알아보도록 하겠습니다.

2단 출력

2단 출력이라고 하면 다음과 같은 결과를 말합니다.

2단 출력

2단 출력

기본적으로는 위의 이미지 처럼 우측에 출력이 되지 않고 좌측에만 연속으로 출력됩니다. 2단 출력을 위해서 다음과 같이 설정합니다.

보고서 디자인 화면에서 바깥쪽을 클릭해서 보고서 속성이 나타나도록 합니다. 속성 중 Columns 항목을 펼칩니다. 기본적으로 Columns 값이 1인데 2로 변경합니다. ColumnSpacing 항목은 컬럼간 공백이므로 적절하게 조정합니다.

보고서 Columns 속성 변경

보고서 Columns 속성 변경

이렇게 변경하면 아래 이미지와 같이 2 열 이라고 보고서 디자인 화면에 나타납니다. 이 영역에는 보기만 가능하고 수정이 불가능합니다. 나타나는 영역을 미리 표시한 것으로 이해하시면 됩니다.

2 열 항목 추가

2 열 항목 추가

보고서의 테이블에 연동된 자료는 다음과 같이 정의된 클래스를 기반으로하였습니다.

public class SessionProgress
{
	public string sequenceNumber { get; set; }
	public string sessionDateTime { get; set; }
	public string show { get; set; }
	public string noShow { get; set; }
}

자료는 소스코드에서 클래스의 값을 지정하고 List 에 추가하는 방식으로 생성했습니다.

public class SessionProgressRepository
{
	public static List<SessionProgress> GetSessionProgress()
	{
		List<SessionProgress> list = new List<SessionProgress>
		{
			new SessionProgress { sequenceNumber = "1", sessionDateTime = "2018.5.21", show = "O", noShow = "" },
			.
			.
			.
			new SessionProgress { sequenceNumber = "##", sessionDateTime = "", show = "", noShow = "" }
		};

		return list;
	}
}

이렇게 정의된 클래스를 데이터 집합 추가를 통해 이용하면 됩니다. 보고서 데이터 항목 중 데이터 집합을 선택하고 마우스 오른쪽 버튼을 클릭합니다. [데이터 집합 추가…] 메뉴를 선택합니다.

데이터 집합 추가 메뉴

데이터 집합 추가 메뉴

다음과 같은 대화 상자가 나타납니다. 새로 만들기 버튼을 클릭합니다. 데이터 소스 구성 마법사 대화 상자가 나타나면 개체를 선택합니다.

데이터 집합 속성 대화 상자

데이터 집합 속성 대화 상자

데이터 소스 구성 마법사

데이터 소스 구성 마법사

다음 버튼을 클릭하면 바인딩 대상 개체 영역에 있는 항목을 확장하면 위에서 정의한 SessionProgress 항목이 있습니다. 이것을 선택하고 마침 버튼을 클릭합니다.

클래스 선택

클래스 선택

반드시 클래스 정의 후 빌드하고 개체를 추가해야 합니다. 그렇지 않으면 클래스가 나타나지 않습니다. 개체를 추가하면 클래스 항목이 나타나고 드래그해서 보고서의 테이블 자료 출력 영역에 놓습니다.

추가된 데이터 집합 항목과 보고서에 추가

추가된 데이터 집합 항목과 보고서에 추가

실행을 해보면 다음과 같이 2단으로 출력됨을 알 수 있습니다. 그런데 우측에 헤더가 출력되지 않아 어색한 느낌이 듭니다.

한번만 출력된 헤더

한번만 출력된 헤더

우측에도 헤더가 나타나도록 다음과 같이 설정합니다. 보고서 디자인 화면에서 우측 하단 부분을 보면 열 그룹이라는 항목이 보입니다. 우측에 화살표가 있는데 클릭하여 고급모드를 선택합니다.

고급 모드 선택

고급 모드 선택

고급 모드를 선택하면 행 그룹, 열 그룹이 다음과 같이 변경됩니다. 행 그룹의 (정적) 항목을 클릭하고 속성창을 보면 RepeatOnNewPage 항목이 있습니다. True로 변경합니다.

우측 열 헤더 출력을 위한 설정

우측 열 헤더 출력을 위한 설정

다시 실행해 보면 첫번째 이미지 처럼 2단 출력 되고 우측에도 헤더가 나타나는 것을 알 수 있습니다.

리포트에 자료를 연동하는 코드는 다음과 같습니다.

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

printPreview.SetDisplayMode(DisplayMode.PrintLayout);

List<SessionProgress> list = SessionProgressRepository.GetSessionProgress();

printPreview.LocalReport.DataSources.Clear();

Microsoft.Reporting.WinForms.ReportDataSource dataset = new Microsoft.Reporting.WinForms.ReportDataSource("DataSet1", list);
printPreview.LocalReport.DataSources.Add(dataset);
dataset.Value = list;

printPreview.LocalReport.Refresh();
printPreview.RefreshReport();

7행에서 자료 List를 생성하고 10행에서 리포트 데이터 소스 변수를 생성합니다. 데이터 집합을 생성할 때 지정한 이름을 첫번째 인수로 전달해 줍니다.

이번 포스트에서는 ReportViewer 2단 출력 에 대해 알아보았습니다.