인터넷 열심히 뒤지면서 알아내고 직접 테스트해본 걸 적어둔다.
일단 인터넷 검색을 하다보면 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;
}
}
'C# > dataGridView' 카테고리의 다른 글
C# dataGridView 현재 Row의 셀값 읽어내기 (KeyUp), CurrentCell (0) | 2015.09.21 |
---|---|
C# dataGridView ContentClick 이벤트, MouseDown 이벤트 (0) | 2015.09.19 |
C# dataGridView 자동 번호 매기기( 원하는 칼럼에 ) (0) | 2015.09.04 |
C# dataGridView 선택된 셀 내용 Textbox 에 표시하기 (0) | 2015.09.04 |
C# dataGridView 홀수/짝수열 배경색 다르게 지정 (0) | 2015.08.28 |