2016-07-26 136 views
0

我對Windows窗體datagridview的拖放行爲有疑問。 在我的場景中,用戶必須從datagridview拖放單行並將其放入列表視圖中。 當我啓動應用程序時,這工作正常,但我刪除了一行後,我必須點擊兩次到datagridview,然後我不得不點擊第三次做一個拖放操作。 這不是userfriendly。 如何在拖拽拖放操作後實現下一步拖拽而不必點擊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只能保持行,因爲multiselect關閉。 當我回到datagridview選擇一行並通過一次單擊就可以啓動draganddrop時,可以嗎? – user3070641

回答

0

而不是使用MouseDown這是用於DataGridView的基本功能,而應該使用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

待辦事項的

關愛無效傳入下降。