728x90

인터넷 열심히 뒤지면서 알아내고 직접 테스트해본 걸 적어둔다.

일단 인터넷 검색을 하다보면 DataGridView1 라고 나온 것이 있는데, C#은 대문자, 소문자를 구분하기 때문에 dataGridView1 이라고 정확하게 적어줘야 에러가 발생하지 않는다.


엑셀 셀처럼 편집하는 기능으로 보이는데 기능을 제대로 파악하려면 아직 한참더 찾아보고 테스트를  해봐야할 거 같다.

자료의 내용은 개발 시험을 하면서 새롭게 알게된 것은 지속적으로 업데이트를 하고 있다.

마지막 업데이트 : 2015.9.7


//Fill grid with items
dataGridView1.DataSource = DS.Tables[0]; //바인딩부분


dataGridView1.RowHeadersVisible = false;  // 행 헤더 숨기기
//dataGridView1.BorderStyle = BorderStyle.Fixed3D;

dataGridView1.Columns[4].HeaderText = "가격";  // HeaderText(제목) 칼럼명 지정
dataGridView1.Columns[5].HeaderText = "수량";
//dataGridView1.Columns[6].Visible = false; // 화면에 보여주고 싶지 않은 칼럼 지정

// Header 가운데 맞춤
dataGridView1.Columns[0].HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter;
dataGridView1.Columns[1].HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter;
dataGridView1.Columns[2].HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter;
dataGridView1.Columns[3].HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter;
dataGridView1.Columns[4].HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter;
dataGridView1.Columns[5].HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter;
dataGridView1.Columns[6].HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter;
// 칼럼(열)의 수보다 많으면 Index 에러가 발생한다는 메시지를 보여줌


// 내용 가운데 맞춤
dataGridView1.Columns[1].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
dataGridView1.Columns["uid"].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;


//dataGridView1.CurrentCell = null;
dataGridView1.AllowUserToOrderColumns = true;  // Column 별로 Sort 및 열 순서 변경 가능
// 열의 순서를 변경해도 MySQL 테이블에는 정상적으로 데이터가 저장됨
dataGridView1.Columns[1].SortMode = DataGridViewColumnSortMode.NotSortable; // Column 정렬(Sort) 못하게
dataGridView1.Columns[2].SortMode = DataGridViewColumnSortMode.NotSortable;

// Read Only Columns and Rows
//dataGridView1.ReadOnly = true;  // 모든 칼럼을 읽기 전용으로 만들기 때문에 특정 칼럼만 수정 불가
dataGridView1.Columns[2].ReadOnly = true; // 특정 칼럼 읽기 전용으로 적용하기
dataGridView1.Columns[3].ReadOnly = true;
dataGridView1.Columns[4].ReadOnly = true;
dataGridView1.Columns[6].ReadOnly = true;

dataGridView1.AllowUserToResizeColumns = false; // Header Column 너비 조정
//dataGridView1.Columns[1].Visible = false; // 칼럼(열) 숨기기
//dataGridView1.RowTemplate.Height = 35; // 셀 높이 결정


dataGridView1.AllowUserToAddRows = false;  // 빈레코드 표시 안하기

빈 여백없이 화면에 출력되도록 하려면

dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;

dataGridView1.AutoResizeColumns();  // 각 열의 데이터에 맞게 자동으로 사이즈를 조절


// 칼럼 출력 자동 맞추기
dataGridView1.Columns[2].AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells;
dataGridView1.Columns[4].DefaultCellStyle.Format = "###,##0";  // 숫자표시 칼럼


칼럼에 따라 너비를 고정으로 하고 싶은 경우가 있다.

dataGridView1.Columns[0].Width = 50;  // Header 너비 수동 설정

처럼 Column 너비만 고정으로 했더니 화면 해상도에 따라 자동으로 크기가 변한다.

칼럼 크기를 완전히 고정하려면

dataGridView1.Columns[1].AutoSizeMode = DataGridViewAutoSizeColumnMode.None;
dataGridView1.Columns[1].Width = 70;

이 두개를 같이 적어줘야 모니터 해상도와 관계없이 고정적으로 변하지 않는다.

칼럼명은 숫자보다 직접 칼럼명을 적어주는 것이 좋다.

dataGridView1.Columns["cate1"].AutoSizeMode = DataGridViewAutoSizeColumnMode.None;

dataGridView1.Columns["cate1"].Width = 70;

나머지 칼럼은 해상도에 따라 적정하게 채워주면 된다.

private void getScreenResolution()
{
     int screenWidth = System.Windows.Forms.Screen.PrimaryScreen.Bounds.Width;
     int screenHeight = System.Windows.Forms.Screen.PrimaryScreen.Bounds.Height;
}

private void setAutoSizeColumnsMode()
{
     if (screenWidth <= 1680 || screenHeight  <= 768)
         dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.DisplayedCells;
     else
         dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;
}



// 그리드 셀 배경색 지정
//dataGridView1.Columns[0].DefaultCellStyle.BackColor = Color.FromArgb(240, 240, 240);
//dataGridView1.Rows[0].DefaultCellStyle.BackColor = Color.LightCyan;
dataGridView1.AlternatingRowsDefaultCellStyle.BackColor = Color.AliceBlue;


private void btn_CellUpdate_Click(object sender, EventArgs e)
{
    // 선택한 셀의 타입 알아보기
    if (typeof(Int32) == dataGridView1.SelectedCells[0].Value.GetType())
    {
        MessageBox.Show("dataGridView1 Cell Value is 숫자");
    }
    else if (typeof(string) == dataGridView1.SelectedCells[0].Value.GetType())
    {
        MessageBox.Show("dataGridView1 Cell Value is 문자열 ");
    }
    else
    {
        MessageBox.Show(dataGridView1.SelectedCells[0].Value.GetType().ToString());
    }
}


마우스 오버 상태에서 highlight 표시 처리

int OldRow = 0;
private void dataGridView1_MouseMove(object sender, MouseEventArgs e)
{
    DataGridView.HitTestInfo hti = dataGridView1.HitTest(e.X, e.Y);

    if (hti.RowIndex >= 0 && hti.RowIndex != OldRow)
    {
        dataGridView1.Rows[OldRow].Selected = false;
        dataGridView1.Rows[hti.RowIndex].Selected = true;
        OldRow = hti.RowIndex;
    }
}

블로그 이미지

Link2Me

,