Wpf gridcontrol 行的拖拽
发表于2019-05-10
回复:0
查看:2285 |
我在WPF中使用gridcontrl控件,dev的版本是13.1; 我想在gridcontrol中实现拖拽,我在网上查了一些资料,但在程序里没有DragDrop的事件,相关资料如下:
<pre class='brush:csharp'>
private GridHitInfo downHitInfo;
private void gridControl1_DragDrop(object sender, DragEventArgs e)
{
//获取鼠标在屏幕上的位置。
Point gridviewPoint = this.PointToScreen (this.gridControl1.Location );
//获取 gridview 中对应的的位置(屏幕位置减去 gridView 开始位置)
upHitInfo = gridView1.CalcHitInfo(new Point(e.X - gridviewPoint.X, e.Y - gridviewPoint.Y));
if (upHitInfo == null || upHitInfo.RowHandle < 0) return;
//获取释放的位置列索引
int endRow =gridView1.GetDataSourceRowIndex ( gridView1.GetDataSourceRowIndex(upHitInfo.RowHandle));
List<XESHI> row = e.Data.GetData(typeof(List<XESHI>)) as List<XESHI>; //获取要移动的数据
if (row != null && row.Count > 0) //没有移动的数据跳过
{
int a;
//获取移动列集合的第一列在数据源的索引
int startRow = asd.IndexOf(row[0]);
XESHI xs = asd[endRow];
if (!row.Contains(xs)) //如果多选的话,确保不能拖拽到这几个里
{
gridView1.ClearSelection();
//排序,先删除后后添加,
for (int i = 0; i < row.Count; i++)
asd.Remove(row[i]);
//若果往上托,则加在鼠标到达行的上面
//如果往下拖,则加在鼠标到达行的下面
if (startRow > endRow)
a = asd.IndexOf(xs);
else
a = asd.IndexOf(xs) + 1;
for (int i = 0; i < row.Count; i++)
{
asd.Insert(a + i, row[i]);
gridView1.SelectRow(a + i);
}
gridView1.FocusedRowHandle = a;
}
}
</pre>
这个dev的版本有关吗?
那如果时dev13.1,怎么实现gridcontrol的拖拽呢
登录 慧都网发表评论