//打开和隐藏列分组
var gridView_custom = gridView1;
#region 双击收缩
Dictionary<string, List<GridColumn>> cacheDictColumns = new Dictionary<string, List<GridColumn>>();
DateTime t1, t2 = DateTime.MinValue;
gridView_custom.MouseDown += (sender, e) =>
{
var sd = sender as DevExpress.XtraGrid.Views.Grid.GridView;
if (sd == null)
{
return;
}
if (e.Button == MouseButtons.Left)
{
t1 = DateTime.Now;
if (Math.Abs((t1 - t2).TotalMilliseconds) > 500)
{
t2 = DateTime.Now;
return;
}
var calcHitInfo = sd.CalcHitInfo(e.X, e.Y);
if (!calcHitInfo.InColumnPanel)
{
return;
}
if (calcHitInfo.Column.Caption.Contains("+") || calcHitInfo.Column.Caption.Contains("-"))
{
var rowIndex = 0;
var vsList = sd.Columns.Where(x => x.Visible).OrderBy(x => x.VisibleIndex).ToList();
if (calcHitInfo.Column.Caption.Contains("-"))
{
calcHitInfo.Column.Caption = calcHitInfo.Column.Caption.Replace('-', '+');
foreach (GridColumn gridColumn in vsList)
{
if (gridColumn.Name == calcHitInfo.Column.Name)
{
rowIndex++;
continue;
}
if (rowIndex == 0)
{
continue;
}
if (rowIndex > 1)
{
if (gridColumn.Caption.Contains("+") || gridColumn.Caption.Contains("-"))
{
break;
}
gridColumn.Visible = false;
cacheDictColumns[calcHitInfo.Column.Name].Add(gridColumn);
}
else
{
gridColumn.Visible = false;
cacheDictColumns[calcHitInfo.Column.Name] = new List<GridColumn>() { gridColumn };
}
rowIndex++;
}
return;
}
if (calcHitInfo.Column.Caption.Contains("+"))
{
calcHitInfo.Column.Caption = calcHitInfo.Column.Caption.Replace('+', '-');
if (cacheDictColumns.ContainsKey(calcHitInfo.Column.Name))
{
foreach (GridColumn gridColumn in vsList)
{
if (gridColumn.Name == calcHitInfo.Column.Name)
{
rowIndex = calcHitInfo.Column.VisibleIndex;
break;
}
}
for (int rrrIndex = 0; rrrIndex < cacheDictColumns[calcHitInfo.Column.Name].Count;
rrrIndex++)
{
rowIndex++;
cacheDictColumns[calcHitInfo.Column.Name][rrrIndex].VisibleIndex = rowIndex;
cacheDictColumns[calcHitInfo.Column.Name][rrrIndex].Visible = true;
}
cacheDictColumns.Remove(calcHitInfo.Column.Name);
}
return;
}
}
}
};
#endregion
#region 左右移动
List<GridColumn> cacheStartList = new List<GridColumn>();
gridView_custom.DragObjectStart += (sender, e) =>
{
var sd = sender as DevExpress.XtraGrid.Views.Grid.GridView;
if (sd == null)
{
return;
}
cacheStartList.Clear();
var vList = sd.Columns.Where(x => x.Visible).OrderBy(x => x.VisibleIndex).ToList();
if (vList.Count == 0)
{
return;
}
cacheStartList.AddRange(vList);
};
gridView_custom.DragObjectDrop += (sender, e) =>
{
var sd = sender as DevExpress.XtraGrid.Views.Grid.GridView;
if (sd == null)
{
return;
}
var dragObject = e.DragObject as GridColumn;
if (dragObject == null)
{
return;
}
if (dragObject.Caption.Contains("+") || dragObject.Caption.Contains("-"))
{
var oldIndexValue = -1;
var groupList = new List<GridColumn>();
var oldIndexList = new List<int>();
for (int rrrIndex = 0; rrrIndex < cacheStartList.Count; rrrIndex++)
{
if (cacheStartList[rrrIndex].Name == dragObject.Name)
{
oldIndexList.Add(rrrIndex);
oldIndexValue = rrrIndex;
groupList.Add(cacheStartList[rrrIndex]);
if (cacheStartList[rrrIndex].Caption.Contains("+"))
{
break;
}
continue;
}
if (oldIndexValue != -1)
{
if (cacheStartList[rrrIndex].Caption.Contains("+") || cacheStartList[rrrIndex].Caption.Contains
("-"))
{
break;
}
oldIndexList.Add(rrrIndex);
groupList.Add(cacheStartList[rrrIndex]);
}
}
var inIndex = -1;
var nameIndex = string.Empty;
if (oldIndexValue < dragObject.VisibleIndex)
{
for (int rrrIndex = 0; rrrIndex < cacheStartList.Count; rrrIndex++)
{
if (dragObject.VisibleIndex < rrrIndex)
{
if (cacheStartList[rrrIndex].Caption.Contains("+") || cacheStartList
[rrrIndex].Caption.Contains("-"))
{
inIndex = rrrIndex;
nameIndex = cacheStartList[rrrIndex].Name;
break;
}
}
}
if (inIndex == -1)
{
inIndex = cacheStartList.Count;
}
}
else
{
for (int rrrIndex = 0; rrrIndex < cacheStartList.Count; rrrIndex++)
{
if (dragObject.VisibleIndex >= rrrIndex)
{
if (cacheStartList[rrrIndex].Caption.Contains("+") || cacheStartList
[rrrIndex].Caption.Contains("-"))
{
inIndex = rrrIndex;
nameIndex = cacheStartList[rrrIndex].Name;
}
}
else
{
if (inIndex != -1)
{
if (cacheStartList[rrrIndex].Caption.Contains("+") || cacheStartList
[rrrIndex].Caption.Contains("-"))
{
break;
}
}
else
{
if (cacheStartList[rrrIndex].Caption.Contains("+") || cacheStartList
[rrrIndex].Caption.Contains("-"))
{
inIndex = rrrIndex;
nameIndex = cacheStartList[rrrIndex].Name;
}
}
}
}
}
if (inIndex < 0)
{
throw new Exception("未识别····");
}
if (oldIndexList.Count(x => x == inIndex) > 0)
{
for (int rrrIndex = 0; rrrIndex < cacheStartList.Count; rrrIndex++)
{
cacheStartList[rrrIndex].VisibleIndex = rrrIndex;
}
return;
}
for (int rrrIndex = cacheStartList.Count - 1; rrrIndex >= 0; rrrIndex--)
{
if (groupList.Any(x => x.Name == cacheStartList[rrrIndex].Name))
{
cacheStartList.RemoveAt(rrrIndex);
}
}
if (string.IsNullOrEmpty(nameIndex))
{
cacheStartList.AddRange(groupList);
}
else
{
for (int rrrIndex = 0; rrrIndex < cacheStartList.Count; rrrIndex++)
{
if (cacheStartList[rrrIndex].Name == nameIndex)
{
cacheStartList.InsertRange(rrrIndex, groupList);
break;
}
}
}
for (int rrrIndex = 0; rrrIndex < cacheStartList.Count; rrrIndex++)
{
cacheStartList[rrrIndex].VisibleIndex = rrrIndex;
}
}
};
#endregion
来源:DevExpress中GridView列头打开隐藏分组和拖动分组_dev中gridcontrol一条记录不显示分组_故里2130的博客-CSDN博客