c# DataGridView 잔기술들 4

행 삭제 이벤트의 버그

RowsRemoved는 행을 없애지 않고 DataTable을 연결만 해도 작동한다. 행을 지운 때에만 이벤트가 실행되게 하려면 UserDeletedRow를 써야 한다.

RowTemplate.Height 설정 버그

비주얼 스투디오 17.4.2에서 디자이너로 DataGridView.RowTemplate.Height를 22로 설정하면 기본 값인 33이 계속 유지된다. 22로 설정하려면 코드로 작성해야 한다.

Dictionary를 바인드하기

DataGridView에 바인드할 수 있는 것들은 리스트 형태의 객체들로 제한되어 있지만 Dictionary는 리스트 형태가 아니라 더 입체적인 구조로 되어 있다. 아래와 같이 key와 value를 각각 리스트 형태로 바꾸어 바인드해야 한다. 클래스의 필드는 get와 set를 붙여서 프라퍼티로 만들어야 한다. 그러지 않으면 아무것도 DataGridView에 출력되지 않는다.

class Class1
{
    public int Int1 { get; set; }
}
class Class2
{
    public int Int1 { get; set; }
    public string String1 { get; set; }
}
private void Form1_Load(object sender, EventArgs e)
{
    Dictionary<Class1, Class2> dictionary = new();
    dictionary.Add(new Class1 { Int1 = 1 }, new Class2 { Int1 = 1, String1 = "a" });
    dictionary.Add(new Class1 { Int1 = 2 }, new Class2 { Int1 = 2, String1 = "b" });
    dataGridView1.DataSource = dictionary.Keys.ToList();
    dataGridView2.DataSource = dictionary.Values.ToList();
}