아래 내용은 DataGridView 의 row 를 마우스 드래그로 이동 시킬수 있는 코드입니다.
단, 직접 DataGridView 에 데이터를 작성해야 합니다. (아래 코드참고)
DataSource 에 데이터를 넣으면 에러가 발생됩니다.
dataGridView.Columns[0].Name = "First";
dataGridView.Columns[1].Name = "Last";
dataGridView.Columns["First"].HeaderText = "First Name";
dataGridView.Columns["Last"].HeaderText = "Last Name";
dataGridView.Columns["First"].SortMode = DataGridViewColumnSortMode.Programmatic;
dataGridView.Columns["Last"].SortMode = DataGridViewColumnSortMode.Programmatic;
dataGridView.Rows.Add(new string[] { "공사명", "땡땡대학교 복도" });
dataGridView.Rows.Add(new string[] { "공종", "토공" });
dataGridView.Rows.Add(new string[] { "위치", "자재배송" });
dataGridView.Rows.Add(new string[] { "내용", "노상다짐. 검측" });
dataGridView.Rows.Add(new string[] { "일자", "2013.07" });
먼저 DataGridView 에 아래 처럼 이벤트를 먹이고 AllowDrop 을 True 합니다.
this.dataGridView.MouseDown += dataGridView_MouseDown;
this.dataGridView.DragOver += dataGridView_DragOver;
this.dataGridView.DragDrop += dataGridView_DragDrop;
this.dataGridView.AllowDrop = true;
그리고 아래 처럼 각 이벤트에 아래 처럼 코딩하면 row 를 이동시킬 수 있습니다.
private int rowIndexFromMouseDown;
private int rowIndexOfItemUnderMouseToDrop;
private void dataGridView_MouseMove(object sender, MouseEventArgs e)
{
if ((e.Button & MouseButtons.Left) == MouseButtons.Left)
{
if (dragBoxFromMouseDown != Rectangle.Empty &&
!dragBoxFromMouseDown.Contains(e.X, e.Y))
{
DragDropEffects dropEffect = dataGridView.DoDragDrop(dataGridView.Rows[rowIndexFromMouseDown], DragDropEffects.Move);
}
}
}
private void dataGridView_MouseDown(object sender, MouseEventArgs e)
{
rowIndexFromMouseDown = dataGridView.HitTest(e.X, e.Y).RowIndex;
if (rowIndexFromMouseDown != -1)
{
Size dragSize = SystemInformation.DragSize;
dragBoxFromMouseDown = new Rectangle(new Point(e.X - (dragSize.Width / 2), e.Y - (dragSize.Height / 2)), dragSize);
}
else
dragBoxFromMouseDown = Rectangle.Empty;
}
private void dataGridView_DragOver(object sender, DragEventArgs e)
{
e.Effect = DragDropEffects.Move;
}
private void dataGridView_DragDrop(object sender, DragEventArgs e)
{
Point clientPoint = dataGridView.PointToClient(new Point(e.X, e.Y));
rowIndexOfItemUnderMouseToDrop = dataGridView.HitTest(clientPoint.X, clientPoint.Y).RowIndex;
if (e.Effect == DragDropEffects.Move)
{
DataGridViewRow rowToMove = e.Data.GetData(typeof(DataGridViewRow)) as DataGridViewRow;
dataGridView.Rows.RemoveAt(rowIndexFromMouseDown);
dataGridView.Rows.Insert(rowIndexOfItemUnderMouseToDrop, rowToMove);
}
}
'C# > Winform' 카테고리의 다른 글
[링크]ProfessionalCSharp (0) | 2018.07.17 |
---|---|
git hub(깃헙) username 변경하기 (0) | 2018.07.04 |
DataGridView to Image (데이터그리드뷰 이미지로 변환) (0) | 2018.05.11 |
Visual Studio 2017 에서 코드상의 빈 줄 제거 하기 (0) | 2018.04.24 |
Web crawling with C# (0) | 2018.04.17 |