c# DataGridView 잔기술들 3
행 옮기기
행을 옮길 때 DataGridViewRowCollection.InsertCopy를 쓰면 새 행이 만들어져 들어간다. 아래와 같이 인스턴스를 복사한 뒤 현재의 것을 없애야 한다.
private void Form1_Load(object sender, EventArgs e) { dataGridView1.Columns.Add("column 1", "column 1"); dataGridView1.Rows.Add("a"); dataGridView1.Rows.Add("b"); } private void Form1_Click(object sender, EventArgs e) { DataGridViewRow dataGridViewRow = dataGridView1.Rows[1]; dataGridView1.Rows.Remove(dataGridViewRow); dataGridView1.Rows.Insert(0, dataGridViewRow); }
데이터 소스 바인드하지 않고 이용하기
간단한 테이블을 만들 때에는 굳이 데이터 소스를 만들어서 연결할 필요가 없다.
dataGridView1.ColumnCount = 5; dataGridView1.Columns[0].Name = "name"; dataGridView1.Columns[1].Name = "address"; dataGridView1.Rows.Add(5); dataGridView1.Rows[0].Cells[0].Value = "shin";
칼럼 iterate하기
DataColumn을 쓰지 않고 DataGridViewColumn을 쓰는 것에 유의한다. DataColumn은 DataTable의 칼럼이다.
foreach (DataGridViewColumn item in dataGridView1.Columns) { item.SortMode = DataGridViewColumnSortMode.NotSortable; }
디자이너 오류
디자이너로 칼럼을 만들 수 있지만 제대로 작동하지 않는 경우가 있다. 이럴 땐 form.designer.cs를 직접 수정해야 한다. 보고된 지 10년도 더 지났는데 고치질 않고 있다. 칼럼은 번거롭더라도 코드로 만들고 설정하는 게 좋다.
row의 height를 설정해도 첫 행에는 반영되지 않는 버그도 있다. 디자이너로 칼럼을 만들고 바인드를 하지 않은 채 실행해 보면 행 하나가 입력을 받기 위해 자동으로 만들어져 있다. 그런데 이 행의 높이는 디자이너로는 제어가 되지 않는다. 코드로 제어해야 한다.