c# DataGridView 잔기술들 2
행과 열 고정/해제하기
여러 행/열들의 하나를 고정하면 그 위/왼쪽의 것들까지 고정된다. 고정된 여러 행/열들 가운데 하나를 해제하면 그 아래/오른쪽의 것들까지 해제된다.
private void Form1_Load(object sender, EventArgs e) { dataGridView1.Columns.Add("column 1", "column 1"); dataGridView1.Rows.Add("a"); dataGridView1.Rows.Add("b"); dataGridView1.Rows[1].Frozen = true; Text = dataGridView1.Rows[0].Frozen.ToString() + " " + dataGridView1.Rows[1].Frozen.ToString(); // true true } private void Form1_Click(object sender, EventArgs e) { dataGridView1.Rows[0].Frozen = false; Text = dataGridView1.Rows[1].Frozen.ToString(); // false }
칼럼 헤더를 여러 줄로 출력하기
DataGridView.ColumnHeadersDefaultCellSytle.Layout.WrapMode는 작동하지 않는다. 버그 같다. ColumnHeader.Text가 길어서 Column.Width를 벗어나도 그냥 잘린다. ColumnHeader.Text 사이에 줄 바꿈 문자 ‘\n’을 넣으면 여러 줄로 출력된다.
마지막 행으로 스크롤하기
행이 추가되면 그 내용을 보기 위해 맨 아래로 스크롤을 해야 한다. 이걸 자동으로 되게 하려면 행 추가 이벤트에 아래 코드를 넣는다.
dataGridView1.FirstDisplayedScrollingRowIndex = dataGridView1.RowCount - 1;
주의할 건 DataGridView.AllowUserToAddRows가 false이면 row의 수가 0이 될 수도 있다는 거다. 이땐 row의 인덱스가 음수가 되어 실행되지 않는다.
특정 칼럼만 읽기 전용으로 설정하기
디자이너 창에서 DataGridView.ReadOnly = true로 하고 아래의 코드를 실행하면 작동하지 않는다.
dataGridView1.Columns.Add("column 1", "column 1"); dataGridView1.Rows.Add(); dataGridView1.Columns[0].ReadOnly = false;
유저 코드는 오토 제너레이티드 코드에 우선해야 하지만 오버라이드하지 못하고 있다. 버그 같다. 반대로 DataGridView.ReadOnly = false인 상태에서 dataGridView1.Columns[0].ReadOnly = true로 하면 제대로 된다. DataGridView에 있는 대부분의 칼럼들을 읽기 전용으로 설정하려면 번거롭더라도 DataGridView를 읽기 전용 해제한 뒤에 읽기 전용으로 할 칼럼들을 일일이 true로 만들어야 한다.