WinForm/C# 使用 Grid 拆分器

fengxiaoyang · 2020年04月13日 · 80 次阅读
var split = wnGrid1.GridView.GridControl.CreateSplitContainer(); //添加Grid拆分器
split.Horizontal = false; //默认,拆分为上下Grid
split.Horizontal = true; //拆分为左右Grid
split.SplitterPosition = 10; //设置拆分器初始位置
split.ShowSplitView(); //显示拆分器(该方法应在绑定数据之后,否则报错)

也可由用户在 Grid 上进行右键点击选择显示或移除拆分器

1586763297(1)

这里提供另外一个方法:

  1. 画两个 Grid,并绑定同一个数据源;
  2. 添加如下代码:

        wnGridMain.MouseWheel += wnGridMain_MouseWheel;
        wnGridChose.MouseWheel += wnGridChose_MouseWheel;
    
    /// <summary>
    /// 响应WnGridMain的MouseWheel事件
    /// </summary>
    private void wnGridMain_MouseWheel(object sender, MouseEventArgs e)
    {
        /* 保证第一行RowIndex相同,保持滚动一致 */
        wnGridChose.TopRowIndex = wnGridMain.TopRowIndex;
    }
    
    /// <summary>
    /// 响应wnGridChose的MouseWheel事件
    /// </summary>
    private void wnGridChose_MouseWheel(object sender, MouseEventArgs e)
    {
        /* 保证第一行RowIndex相同,保持滚动一致 */
        wnGridMain.TopRowIndex = wnGridChose.TopRowIndex;
    }
    

    3.如若进行排序操作,添加如下代码:

        wnGridMain.GridView.EndSorting += wnGridMain_GridView_EndSorting;
        wnGridChose.GridView.EndSorting += wnGridChose_GridView_EndSorting;
    
    /// <summary>
    /// 响应wnGridMain_GridView的EndSorting事件
    /// </summary>
    private void wnGridMain_GridView_EndSorting(object sender, EventArgs e)
    {
        /* 创建ht接收来自wnGridMain的排序参数信息(正序or倒序) */
        Hashtable ht = new Hashtable();
        foreach (GridColumnSortInfo i in wnGridMain.GridView.SortInfo)
        {
            ht[i.Column.FieldName] = i.SortOrder;
        }
    
        /* List参数接收变量接收来自GridColumnSortInfo的详细信息(哪一列按照什么排序规则进行排序) */
        List<GridColumnSortInfo> list = new List<GridColumnSortInfo>();
        foreach (string keys in ht.Keys)
        {
            GridColumnSortInfo s = new GridColumnSortInfo(wnGridChose.GridView.Columns[keys], (ColumnSortOrder)ht[keys]);
            list.Add(s);
        }
    
        /* 同步更新至另一个Grid的排序信息,先clear再加,保证均为List内的排序规则 */
        wnGridChose.GridView.SortInfo.ClearAndAddRange(list.ToArray());
    }
    
    /// <summary>
    /// 响应wnGridChose_GridView的EndSorting事件
    /// </summary>
    private void wnGridChose_GridView_EndSorting(object sender, EventArgs e)
    {
        /* 创建ht接收来自wnGridMain的排序参数信息(正序or倒序) */
        Hashtable ht = new Hashtable();
        foreach (GridColumnSortInfo i in wnGridChose.GridView.SortInfo)
        {
            ht[i.Column.FieldName] = i.SortOrder;
        }
    
        /* List参数接收变量接收来自GridColumnSortInfo的详细信息(哪一列按照什么排序规则进行排序) */
        List<GridColumnSortInfo> list = new List<GridColumnSortInfo>();
        foreach (string keys in ht.Keys)
        {
            GridColumnSortInfo s = new GridColumnSortInfo(wnGridMain.GridView.Columns[keys], (ColumnSortOrder)ht[keys]);
            list.Add(s);
        }
    
        /* 同步更新至另一个Grid的排序信息,先clear再加,保证均为List内的排序规则 */
        wnGridMain.GridView.SortInfo.ClearAndAddRange(list.ToArray());
    }
    

注:此方法存在弊端,只能设置一个 Grid 进行编辑,另外一个不允许编辑,否则会出现各种不可预知性异常。 不会添加 gif 图片。。。想看实际效果的可以告知模块名称看实际模块效果。也可以提供源码~~

会发 gif 了,发一下实际效果图

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册