今天在论坛上看到有人问怎样从LISTBOX向datagridview中拖动数据,自己便思索了下,写了一个DEMO。现在分享给大家,有不足之处,望大家指正。
这个DEMO包括从LISTBOX向datagridview中拖动数据和从datagridview向listbox中拖动数据。现在我们大家来一一讲解.
1. 从LISTBOX向DATAGRIDVIEW拖动数据
这个操作把listbox中的数据拖动到DATAGRIDVIEW,并从listbox中删除.listbox作为拖动源,DATAGRIDVIEW作为拖动目标对象.要把接收对象DATAGRIDVIEW的AllowDROP属性设为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. 从datagridview向listbox中拖动数据
这个过程和第一步的实现方式类似,这时listbox作为接收数据的目标对象,我们要把listbox的allowdrop属性设为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上方时,判断数据格式以及目标对象,和
拖动方式.我们在listbox的DragEnter 事件中进行判断
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中删除选中数据所在的行,我们在listbox的DragDrop事件中执行操作
private void listBox1_DragDrop(object sender, DragEventArgs e)
{
this.listBox1.Items.Add(data);
this.dataGridView1.Rows.RemoveAt(dgvIndex);
}
DEMO下载地址
http://zx13525079024.download.csdn.net/