C#如何?DataGridView到DataGridView的拖拽

來源:互聯網
上載者:User

今天工作中遇到一個問題,需要將一個DataGridView中的某一行拖拽到另一個DataGridView中,在網上搜了一遍,大多是從DataGridView拖拽到TextBox等控制項,沒有拖拽到
DataGridView中的。拖拽到TextBox很容易,但拖拽到DataGridView就有一個問題:如何決定拖拽到DataGridView中的哪一個Cell?
為此研究了兩個小時,終於找到了答案。
例如要實現從gridSource到gridTarget的拖拽,需要一個設定和三個事件:
1、設定gridTarget的屬性AllowDrop為True
2、實現gridSource的MouseDown事件,在這裡進行要拖拽的Cell內容的儲存,儲存到剪貼簿。
3、實現gridTarget的DragDrop和DragEnter事件,DragDrop事件中的一個痛點就是決定拖拽到哪一個Cell

代碼如下:

gridSource的MouseDown事件:

Code
private void gridSource_MouseDown(object sender, MouseEventArgs e)
{
     if (e.Button == MouseButtons.Left)
     {
          DataGridView.HitTestInfo info = this.gridSource.HitTest(e.X, e.Y);
          if (info.RowIndex >= 0)
          {
              if (info.RowIndex >= 0 && info.ColumnIndex >= 0)
              {
                  string text = (String)this.gridSource.Rows[info.RowIndex].Cells[info.ColumnIndex].Value;
                   if (text != null)
                    {
                        this.gridSource.DoDragDrop(text, DragDropEffects.Copy);
                     }
               }
           }
       }
 }

 

gridTarget的DragDrop事件:

Code
private void gridTarget_DragDrop(object sender, DragEventArgs e)
{
       //得到要拖拽到的位置
     Point p = this.gridTarget.PointToClient(new Point(e.X, e.Y));
      DataGridView.HitTestInfo hit = this.gridTarget.HitTest(p.X, p.Y);
      if (hit.Type == DataGridViewHitTestType.Cell)
      {
            DataGridViewCell clickedCell = this.gridTarget.Rows[hit.RowIndex].Cells[hit.ColumnIndex];
            clickedCell.Value = (System.String)e.Data.GetData(typeof(System.String));
       //如果只想允許拖拽到某一個特定列,比如Target Field Expression,則先要判斷列是否為Target Field Expression,如下:
             //if (0 == string.Compare(clickedCell.OwningColumn.Name, "Target Field Expression"))
             //{
             //    clickedCell.Value = (System.String)e.Data.GetData(typeof(System.String));
             //}
       }
}

 

gridTarget的DragEnter事件:

Code
private void gridTarget_DragEnter(object sender, DragEventArgs e)
{
     e.Effect = DragDropEffects.Copy;
}
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.