listbox与datagridview相互拖动数据

时间:2021-10-20 22:17:47

今天在论坛上看到有人问怎样从LISTBOXdatagridview中拖动数据,自己便思索了下,写了一个DEMO。现在分享给大家,有不足之处,望大家指正。

这个DEMO包括从LISTBOXdatagridview中拖动数据和从datagridviewlistbox中拖动数据。现在我们大家来一一讲解.

  listbox与datagridview相互拖动数据

1.       LISTBOXDATAGRIDVIEW拖动数据

这个操作把listbox中的数据拖动到DATAGRIDVIEW,并从listbox中删除.listbox作为拖动源,DATAGRIDVIEW作为拖动目标对象.要把接收对象DATAGRIDVIEWAllowDROP属性设为TRUE;

首先LISTBOX中按下鼠标时确定要拖动的项。在其鼠标按下事件中

int indexofsource;//选中的LISTBOX项的索引

private void listBox1_MouseDown(object sender, MouseEventArgs e)

        {

//取的LISTBOX中选中的项的索引

            indexofsource = ((ListBox)sender).IndexFromPoint(e.X, e.Y);

            if (indexofsource != ListBox.NoMatches)

            {

 //确定拖动的数据

                ((ListBox)sender).DoDragDrop(((ListBox)sender).Items[indexofsource].ToString(), DragDropEffects.All);

            }

        }

 

再次确定当数据拖动到DATAGRIDVIEW上方时,判断数据格式以及目标对象,和

拖动方式

private void dataGridView1_DragEnter(object sender, DragEventArgs e)

        {

            //拖动源和放置的目的地一定是一个dataGridView1

            if (e.Data.GetDataPresent(typeof(System.String)) && ((DataGridView)sender).Equals(dataGridView1))

            {

                e.Effect = DragDropEffects.Move;

            }

            else

                e.Effect = DragDropEffects.None;

        }

 

最后我们要判断拖动完成后要执行的操作,这里我们把数据添加到datagridview中,并从listbox

删除拖动的数据

        private void dataGridView1_DragDrop(object sender, DragEventArgs e)

        {

            //DATAGRIDVIEW里面放入新添加的项,然后从LISTBOX里面删除

            int count = this.dataGridView1.Rows.Add();

            string str = listBox1.Items[indexofsource].ToString();

            this.dataGridView1.Rows[count].Cells[0].Value = str;

            this.listBox1.Items.RemoveAt(indexofsource);

        }

 

 

2.       datagridviewlistbox中拖动数据

这个过程和第一步的实现方式类似,这时listbox作为接收数据的目标对象,我们要把listboxallowdrop属性设为true;

首先我们要确定在datagridview中选中的数据,也就是选中哪个单元格中的数据,我们在单元格的鼠标按下事件中作判断

int dgvIndex;//选中的DATAgridview行索引

        string data;//选中的DATAgridview中的数据

private void dataGridView1_CellMouseDown(object sender, DataGridViewCellMouseEventArgs e)

        {

        //判断是否是标题栏

            if (e.RowIndex>-1)

            {

                dgvIndex = e.RowIndex;

                if (e.ColumnIndex>-1)

                {

                 data = this.dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value.ToString();

                this.dataGridView1.DoDragDrop(data, DragDropEffects.Move);

                }

            }

 

        }

 

再次确定当数据拖动到listbox上方时,判断数据格式以及目标对象,和

拖动方式.我们在listboxDragEnter 事件中进行判断

private void listBox1_DragEnter(object sender, DragEventArgs e)

        {

            //拖动源和放置的目的地一定是一个listbox

            if (e.Data.GetDataPresent(typeof(System.String)) && ((ListBox)sender).Equals(listBox1))

            {

                e.Effect = DragDropEffects.Move;

            }

            else

                e.Effect = DragDropEffects.None;

        }

最后我们判断完成后怎样向listbox中添加数据,并从datagridview中删除选中数据所在的行,我们在listboxDragDrop事件中执行操作

private void listBox1_DragDrop(object sender, DragEventArgs e)

        {

            this.listBox1.Items.Add(data);

            this.dataGridView1.Rows.RemoveAt(dgvIndex);

        }

 

DEMO下载地址

http://zx13525079024.download.csdn.net/