两个listview分组之后,拖拽数据问题,求帮助

yiuon 2014-12-02 06:10:43
本人就是想实现,在分组的情况下,一个listview里面的数据移到另一个listview的数据项上面时候,可以获取到是移到另一个listview哪个数据项上面。
两个listview, lvPerson,lvFootBath,从lvPerson里面拖数据项到lvFootBath里面数据的项上面,再没有分组之前,将lvPerson的数据项移到lvFootBath的数据项上面,可以定位出来是在lvFootBath的哪一项上面。但是分组之后,lvFootBath.InsertionMark就出问题了,无法定位到正确的位置。求帮助,下面列出代码。


private void lvFootBath_DragOver(object sender, DragEventArgs e)
{
Point targetPoint = lvFootBath.PointToClient(new Point(e.X, e.Y));
int targetIndex = lvFootBath.InsertionMark.NearestIndex(targetPoint);
labelControl3.Text = targetIndex.ToString();
if (targetIndex > -1)
{
Rectangle itemBounds = lvFootBath.GetItemRect(targetIndex);
if (targetPoint.X > itemBounds.Left + 10
&& targetPoint.X < itemBounds.Left + itemBounds.Width - 20
&& targetPoint.Y > itemBounds.Top + 10
&& targetPoint.Y < itemBounds.Top + itemBounds.Height - 20)
{
lvFootBath.Items[targetIndex].BackColor = Color.Red;
//设置预期放置位置
lvFootBath.InsertionMark.Index = targetIndex;
}
else
{
foreach (ListViewItem item in lvFootBath.Items)
{
item.BackColor = Color.White;
}
}
}
else
{
foreach (ListViewItem item in lvFootBath.Items)
{
item.BackColor = Color.White;
}
}
}

private void lvFootBath_DragDrop(object sender, DragEventArgs e)
{
int targetIndex = lvFootBath.InsertionMark.Index;

if (targetIndex == -1) { return; }

ListViewItem draggedItme = (ListViewItem)e.Data.GetData(typeof(ListViewItem));

//处理一些事情

//重置背景色
foreach (ListViewItem item in lvFootBath.Items)
{
item.BackColor = new Color();
}
lvFootBath.InsertionMark.Index = -1;
}

private void lvFootBath_DragEnter(object sender, DragEventArgs e)
{
e.Effect = e.AllowedEffect;
}

private void lvFootBath_DragLeave(object sender, EventArgs e)
{
lvFootBath.InsertionMark.Index = -1;
}

private void lvPerson_ItemDrag(object sender, ItemDragEventArgs e)
{
lvPerson.DoDragDrop(e.Item, DragDropEffects.Move);
}

private void lvPerson_DragLeave(object sender, EventArgs e)
{
lvPerson.InsertionMark.Index = -1;
}
...全文
155 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
ttxz_994714553 2014-12-03
  • 打赏
  • 举报
回复
在ListView控件中拖动视图项 private void listView1_ItemDrag(object sender, ItemDragEventArgs e) { //起动拖放放操作,设置拖放类型 listView1.DoDragDrop(listView1.SelectedItems, DragDropEffects.Move); } //选择要拖动的项 private void listView1_DragEnter(object sender, DragEventArgs e) { //获取ListView类型数据 for (int i = 0; i <= e.Data.GetFormats().Length - 1; i++) { if (e.Data.GetFormats()[i].Equals("System.Windows.Forms.ListView+SelectedListViewItemCollection")) { e.Effect = DragDropEffects.Move; } } } private void listView1_DragDrop(object sender, DragEventArgs e) { //判断是否选择拖放的项 if (listView1.SelectedItems.Count == 0) { return;//退出方法 } Point cp = listView1.PointToClient(new Point(e.X, e.Y));//定义项的坐标点 ListViewItem dragToItem = listView1.GetItemAt(cp.X, cp.Y);//得到指定位置的项 if (dragToItem == null)//判断是否为空 { return;//退出方法 } List<ListViewItem> ls = new List<ListViewItem>();//创建项集合 foreach (ListViewItem lvi in listView1.SelectedItems)//遍历选中的项 { ls.Add(lvi);//将选中项添加到集合 } for (int i = 0; i < ls.Count; i++) { listView1.Items.Remove(ls[i]); } for (int i = 0; i < ls.Count; i++) { listView1.Items.Insert(dragToItem.Index, ls[i]); } ls.Clear(); for (int i = 0; i < listView1.Items.Count; i++) { ls.Add(listView1.Items[i]); } listView1.Items.Clear(); for (int i = 0; i < ls.Count; i++) { listView1.Items.Add(ls[i]); } }
yiuon 2014-12-03
  • 打赏
  • 举报
回复
引用 2 楼 Z65443344 的回复:
没看懂你所谓的"分组"是怎么分的
贴个截图出来看看


就是Group之后,进行拖拽定位的问题。
於黾 2014-12-03
  • 打赏
  • 举报
回复
没看懂你所谓的"分组"是怎么分的 贴个截图出来看看
yiuon 2014-12-03
  • 打赏
  • 举报
回复
求大神帮助啊

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧