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를 설정해도 첫 행에는 반영되지 않는 버그도 있다. 디자이너로 칼럼을 만들고 바인드를 하지 않은 채 실행해 보면 행 하나가 입력을 받기 위해 자동으로 만들어져 있다. 그런데 이 행의 높이는 디자이너로는 제어가 되지 않는다. 코드로 제어해야 한다.