[c#] DataGridView 헤더에 DisplayName으로 이름 출력하기
클래스를 List 등에 담아 DataGridView에 바인딩하면 클래스의 프라퍼티 이름이 DataGridViewColumn.HeaderText가 되어 헤더에 출력된다. 하지만 대부분의 경우 프라퍼티 이름과는 다른 이름을 출력해야 한다. 이럴 땐 DataGridView애트리뷰트를 이용하면 된다.
클래스를 List 등에 담아 DataGridView에 바인딩하면 클래스의 프라퍼티 이름이 DataGridViewColumn.HeaderText가 되어 헤더에 출력된다. 하지만 대부분의 경우 프라퍼티 이름과는 다른 이름을 출력해야 한다. 이럴 땐 DataGridView애트리뷰트를 이용하면 된다.
List 같은 데이터 소스를 DataGridView에 바인딩하면 맨 아래에 빈 행이 하나 추가된다. 이 행에 입력하여 추가를 할 수 있게 하기 위해서다. 이걸 없애려면 행을 추가할 수 없게 하면 되는데 속성 창에서 AllowUserToAddRows를 false로 하면 된다.
행이나 열의 헤더 레이아웃 얼라인먼트를 설정하려면 굳이 코드를 작성하는 거보단 속성 창의 ColumnHeadersDefaultCellStyle이나 RowHeadersDefaultCellStyle에서 alignment 값을 설정하는 게 간단하다. 칼럼 헤더의 레이아웃 얼라인먼트를 가운데로 해도 문자열은 한가운데에 출력되지 않고 오른쪽으로 해도 오른쪽 끝에 붙지 않는다. 칼럼 헤더에는 소트 기능이 있는데 칼럼 헤더를 클릭하면 헤더의 오른쪽 끝에 삼각형 두 개가 위아래로 나타난다. 이게 출력될 자리를 확보해…
삼항연산자 또는 삼항 조건 연산자ternary conditional operator ?:를 이용하면 조건문을 간결하게 할 수 있다. ternary는 ‘세 개를 한 묶음으로 하는 것’이라는 뜻이다. 예를 들면 정수를 담은 리스트가 있다. 아이템들 개수가 열 개 이상이면 앞의 열 개만 2로 바꾸고 열 개 미만이면 모든 아이템들을 2로 바꾼다. 삼항연산자를 써서 아래와 같이 바꿀 수 있다.
access modifier가 마이크로소프트 한글 문서에는 액세스 한정자라고 번역되어 있다. modify는 ‘수정한다’는 뜻 말고도 ‘수식한다’라는 의미도 갖는다. 형용사가 명사를 수식하듯이 대상의 뜻을 분명하게 한다는 뜻이다. 제한자라고 번역하는 건 틀리다. 마이크로소프트 문서에는 ‘특정한다specify‘고 기술되어 있다. 구글로 검색해 보면 그냥 액세스 모디파이어라고 하는 게 제일 많이 쓰인다. 액세스 모디파이어는 생략할 수 있다. 클래스의 멤버들인 경우에는 생략하면 private로 처리된다….
String.ToCharArray는 인스턴스를 만든다. 아래의 코드에서 캐릭터 배열은 초기화되지 않았지만 제대로 실행된다. 캐릭터 배열은 레퍼런스 타입이므로 이걸 아규먼트로 받은 메서드에서 그 값을 수정하면 호출한 메서드에도 반영된다. String.ToCharArray를 이용하면 chars는 새로운 인스턴스를 갖게 되므로 호출한 메서드에는 반영되지 않아서 널 문자 다섯 개만 출력된다.
클래스 안에 만들어지는 프라퍼티와 필드는 데이터를 저장하는 데에 있어서는 기능하는 게 비슷하다. 이들 사이에서 어떤 걸 써야 하나 애매하다. 필드에 접근하려면 public으로 만들어야 한다. 마이크로소프트는 필드를 퍼블릭으로 만들지 말라고 한다. 필드를 퍼블릭으로 만들지 않으면 필드에 직접 접근할 수 없다. 프라퍼티를 만들어서 거쳐야 한다. 복잡하다. 프라퍼티만 만들어서도 필드를 대체할 수 있다. 뒤에 { get; set; }를…
ComboBox에 아이템을 추가하기만 하면 SelectedIndex는 바뀌지 않기 때문에 추가된 아이템은 보이지 않는다. 추가된 아이템을 보이게 하려면 SelectedIndex를 마지막 인덱스로 바꿔야 한다. 그렇다고 ComboBox.Items.Count – 1이라고 하는 건 좀 바보스럽다. 아래와 같이 하면 간단하다.
ComboBox.ObjectCollection.Add()는 널을 아규먼트로 받을 수 없다. 이 메서드에 널을 넣으면 애플리케이션이 멈춘다. 아래의 코드에서 method1에 널 아닌 값이 가더라도 컴파일러는 cs8604 경고를 보낸다. 의도하지 않은 상황에 널이 전달되어 애플리케이션이 멈추는 것을 막으려는 거다. 변수 오른쪽에 ?를 붙이면 널도 값으로 가질 수 있는 변수가 된다. 이걸 nullable variable이라 한다. 위 예제에서는 cs8604 상황을 일부러 만들기 위해서…