2016-07-26 1 views
0

나는 Windows Forms DataGridview의 끌어서 놓기 동작에 대한 질문이 있습니다. 필자의 시나리오에서는 사용자가 단일 행을 DataGridview에서 끌어서 목록보기에 놓아야합니다. 응용 프로그램을 시작할 때이 잘 작동하지만 한 행을 삭제 한 후 두 번 클릭하여 datagridview 클릭 한 다음 끌어서 놓기 작업을 세 번째 시간을 클릭해야합니다. 이것은 사용자 친화적 인 것이 아닙니다. 드래그 앤 드롭 작업 후에 DataGridview를 클릭하지 않고도 다음 드래그 앤 드롭을 수행 할 수 있습니다. (클릭하고 마지막 드래그 앤 드롭 한 후 한 번의 클릭으로 떨어 mousebutton을 보유) 여기 C# DataGridView 끌어서 놓기 동작?

은 샘플 코드입니다 :

private void dataGridView1_MouseDown(object sender, MouseEventArgs e) 
    { 
     dataGridView1.DoDragDrop(dataGridView1.SelectedRows, DragDropEffects.Move); 
     dataGridView1.Focus(); 
     dataGridView1.CurrentCell = dataGridView1.SelectedRows[0].Cells[0]; 
    } 

    private void listBox1_DragEnter(object sender, DragEventArgs e) 
    { 
      e.Effect = DragDropEffects.Move; 
    } 

    private void listBox1_DragDrop(object sender, DragEventArgs e) 
    { 
     MessageBox.Show(dataGridView1.SelectedRows[0].Cells[0].Value.ToString()); 

    } 

가 이미 datagridview1.Focus (함께이 문제를 해결하기 위해 노력했다)하지만, 아무튼 도와주세요.

추가 정보 : Datagridview는 읽기 전용, 다중 선택 해제 및 fullrowselection으로 설정됩니다.

감사합니다.

+0

드래그 드롭은 사용자가 행을 드래그하는 것이 아니라 모든 마우스 버튼을 클릭하기 만하면 시작됩니다. 즉, 다시 돌아올 때 첫 번째 클릭은 행 등을 선택하는 대신 DD 연산을 시작한다는 의미입니다. 또한 선택한 행을 모두 드래그 한 것처럼 보이지만 드래그 한 행은 드래그 한 것처럼 보입니다. – Plutonix

+0

예, 사실이지만 SelectedRows는 다중 선택이 해제되어 있기 때문에 Row를 보유 할 수 있습니다. 한 번의 클릭으로 행을 선택하고 draganddrop을 시작하려면 datagridview로 돌아갈 수 있습니까? – user3070641

답변

0

의 기본 기능에 사용되는 MouseDown을 사용하는 대신 MouseMove을 사용해야합니다. 이 동작에서

private void lvDrop_DragDrop(object sender, DragEventArgs e) 
{ 
    var rows = e.Data.GetData(typeof(DataGridViewSelectedRowCollection)) 
       as DataGridViewSelectedRowCollection; 

    if(rows.Count > 0) 
    { 
     foreach(DataGridViewRow row in rows) 
     { 
      lvDrop.Items.Add(row.Cells[0].Value.ToString()); 
     } 
    } 
} 

private void lvDrop_DragEnter(object sender, DragEventArgs e) 
{ 
    e.Effect = DragDropEffects.Move; 
} 

private void dgvDrag_MouseMove(object sender, MouseEventArgs e) 
{ 
    if(e.Button == MouseButtons.Left) 
    { 
     dgvDrag.DoDragDrop(dgvDrag.SelectedRows, DragDropEffects.Move); 
    } 
} 

결과 :

enter image description here

할일의

케어 유효하지 않은 입력 방울합니다.