2013-06-29 152 views
1

我想寫一個拖放功能,我只是有點困難。Datagridgridview拖放事件

我的問題如下:

1)在reguards所附的代碼,應該Load_Load事件被稱爲第一或不要緊,它是按什麼順序(你可以看到,它的最後一個事件稱爲在這組代碼中)。

2.)拖/放事件工作,但是當我點擊一個單元格或列標題,在網格二我得到:類型'System.ArgumentOutOfRangeException'的未處理的異常發生在mscorlib.dll中。我該如何解決這個問題?

3.)在數據網格2中,單元格0和單元格1編號爲單元格0和單元格1.當我將鼠標懸停在兩個單元格上時,單元格0的值爲0-1,單元格1的值爲1-2,其餘單元格沒有編號或有工具提示。這是如何修復的?

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Windows.Forms; 

namespace Suite_Estimation 
{ 
public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void dataGridView1_DragDrop(object sender, DragEventArgs e) 
    { 
     if (e.Data.GetDataPresent(typeof(System.String))) 
     { 
      Point clientPoint = dataGridView1.PointToClient(new Point(e.X, e.Y));    
      dataGridView1.Rows[dataGridView1.HitTest(clientPoint.X,  clientPoint.Y).RowIndex].Cells[dataGridView1.HitTest(clientPoint.X, clientPoint.Y).ColumnIndex].Value = (System.String)e.Data.GetData(typeof(System.String)); 

     } 
} 

    private void dataGridView1_DragEnter(object sender, DragEventArgs e) 
    { 
    if (e.Data.GetDataPresent(typeof(System.String))) 
      e.Effect = DragDropEffects.Copy; 
     else 
      e.Effect = DragDropEffects.None; 
    } 

    private void dataGridView2_CellMouseDown(object sender, DataGridViewCellMouseEventArgs e) 
    { 
    dataGridView2.DoDragDrop(dataGridView2.Rows[e.RowIndex].Cells[e.ColumnIndex].Value.ToString(), DragDropEffects.Copy); 

    } 

    private void Form1_Load(object sender, EventArgs e) 
    { 
     DataGridViewRow dr = new DataGridViewRow(); 

     dataGridView2.Rows.Add(5); 
     dataGridView2.Rows[0].Cells[0].Value = "00000000"; 
     dataGridView2.Rows[1].Cells[0].Value = "11111111"; 
     dataGridView2.Rows[2].Cells[0].Value = "22222222"; 
     dataGridView2.Rows[3].Cells[0].Value = "33333333"; 
     dataGridView2.Rows[4].Cells[0].Value = "44444444"; 
     dataGridView2.Rows[0].HeaderCell.Value = "0 - 1"; 
     dataGridView2.Rows[1].HeaderCell.Value = "1 - 2"; 
    } 
} 

}

回答

0

試試這個

private void dataGridView1_CellMouseDown(object sender, DataGridViewCellMouseEventArgs e) 
     { 
      if (e.RowIndex > -1 && e.ColumnIndex > -1) 
       dataGridView1.DoDragDrop(
        dataGridView1.Rows[e.RowIndex] 
           .Cells[e.ColumnIndex] 
           .Value.ToString(), 
        DragDropEffects.Copy); 
     } 

private void dataGridView1_DragDrop(object sender, DragEventArgs e) 
{ 
    if (e.Data.GetDataPresent(typeof(System.String))) 
    { 
     Point clientPoint = dataGridView1.PointToClient(new Point(e.X, e.Y)); 
     int rowIndex = dataGridView1.HitTest(clientPoint.X, clientPoint.Y).RowIndex; 
     int colIndex = dataGridView1.HitTest(clientPoint.X, clientPoint.Y).ColumnIndex; 
     if (rowIndex > -1 && colIndex > -1) 
      dataGridView1.Rows[rowIndex].Cells[colIndex].Value = 
          (System.String)e.Data.GetData(typeof(System.String)); 
    } 
} 
+0

細胞和列標題不使用該代碼給異常,但小區現在給System.NullReferenceException時,我對細胞點擊拖動。 – user2506869

+0

Actuall工作 - 我將您的代碼更改爲datagrid2,它的工作原理,但如果我不完全放在單元格中,我會得到一個錯誤(例如,如果我試圖放在沒有添加行的標題或空間上給出異常:ArgumentOutOfRangeException。但是,這是非常有用的謝謝你! – user2506869

+0

@ user2506869,請參閱編輯 – yogi