Dev中GridView设置列头勾选项与表格一致

在工作中,需要设置列头勾选项与表格中勾选项一致。并且根据列表勾选项变化,列头也跟着相应变化

首先,勾选列需要设置列的columnedit

private void SetCheckCol()
{
                    column.Caption = " ";
                    var editorImgSingle = new DevExpress.XtraEditors.Repository.BaseRepositoryItemCheckEdit();
                    column.ColumnEdit = editorImgSingle;
                    column.OptionsColumn.AllowSort = DefaultBoolean.False;
                    column.Width = 25.ToDpi();
}

表格勾选项设置完,设置列头勾选项,重要的是还需要设置列头勾选项样式与表格一致

   public void gridView2_CustomDrawColumnHeader(object sender, ColumnHeaderCustomDrawEventArgs e)
        {
            DevExpress.XtraGrid.Views.Grid.GridView view = sender as DevExpress.XtraGrid.Views.Grid.GridView;
            if (e?.Column?.Name == nameof(SpectraLibraryItemVM.Check))
            {
                if (_formType != FormType.ImportReferenceSpectrFromLibrary)
                {
                    e.Info.InnerElements.Clear();
                    e.Painter.DrawObject(e.Info);
                    CheckState checkState = CheckState.Unchecked;
                    List<bool> itemVMs =new  List<bool>();//设置数据
                    if (itemVMs.Count > 0)
                    {
                        if (itemVMs.Count(r => !r.Check) == itemVMs.Count)
                        {
                        }
                        else if (itemVMs.Count(r => r.Check) == itemVMs.Count)
                        {
                            checkState = CheckState.Checked;
                        }
                        else
                        {
                            checkState = CheckState.Indeterminate;
                        }
                    }
                    else
                    {
                        if (e.Column.Tag != null && e.Column.Tag.ToString() == "1")
                        {
                            checkState = CheckState.Checked;
                        }
                    }
                    //根据checkstate不同设置不同状态
                    DrawCheckBox(e.Graphics, e.Bounds, checkState);
                    e.Handled = true;
                }
            }
           
        }

DevExpress.XtraEditors.Repository.RepositoryItemCheckEdit repositoryItemCheckEdit = new DevExpress.XtraEditors.Repository.RepositoryItemCheckEdit();
//绘制列头表格
        protected void DrawCheckBox(Graphics g, Rectangle r, CheckState checkState)
        {
            repositoryItemCheckEdit.LookAndFeel.ParentLookAndFeel = gridControl.LookAndFeel;
            repositoryItemCheckEdit.AllowGrayed = true;
            CheckEditViewInfo info = (CheckEditViewInfo)repositoryItemCheckEdit.CreateViewInfo();
            info.EditValue = repositoryItemCheckEdit.GetValueByState((CheckState)checkState);
            info.Bounds = r;
            info.CalcViewInfo(g);
            CheckEditPainter painter = (CheckEditPainter)repositoryItemCheckEdit.CreatePainter();
            ControlGraphicsInfoArgs args = default(ControlGraphicsInfoArgs);
            args = new ControlGraphicsInfoArgs(info, new DevExpress.Utils.Drawing.GraphicsCache(g), r);
            painter.Draw(args);
            args.Cache.Dispose();

        }

设置完以后,点击列头或者表格勾选框需要跟着相应改变(例如点击列头,下面表格需要全勾选)

public void gridView2_MouseUp(object sender, MouseEventArgs e)
        {
            //获取鼠标当前所在坐标点的信息(该点相对于控件的坐标系)
            DevExpress.XtraGrid.Views.Grid.ViewInfo.GridHitInfo gridHitInfo = this.gridView2.CalcHitInfo(new Point(e.X, e.Y));
            if (gridHitInfo.Column == null) return;
            if (gridHitInfo.Column.Name == nameof(SpectraLibraryItemVM.Check))
            {
                    if (gridHitInfo.InRowCell)
                    {
                        bool checkflag = (bool)gridView2.GetFocusedValue();
                        gridView2.SetFocusedValue(!checkflag);
                        if (_formType == FormType.ImportToLibrary || _formType == FormType.AddToLibrary)
                        {
                            SpectraLibraryItemVM itemFocused = gridView2.GetFocusedRow() as SpectraLibraryItemVM;
                            for (int i = 0; i < gridView2.RowCount; i++)
                            {
                                if (i != gridView2.FocusedRowHandle)
                                {
                                    SpectraLibraryItemVM item = gridView2.GetRow(i) as SpectraLibraryItemVM;
                                    if (SpectraLibraryHelper.CheckSameRefSpectra(item, itemFocused))
                                    {
                                        gridView2.SetRowCellValue(i, gridHitInfo.Column, false);
                                    }
                                }
                            }
                        }
                        if (BooCheckOnlySeleted && checkflag)
                        {
                            DeleteGridControlRow(gridHitInfo.RowHandle);
                        }
                    }
                    else if (gridHitInfo.InColumn)
                    {
                        if (gridHitInfo.Column.Tag != null && gridHitInfo.Column.Tag.ToString() == "1")
                        {
                            gridHitInfo.Column.Tag = "0";
                            for (int i = 0; i < gridView2.RowCount; i++)
                            {
                                gridView2.SetRowCellValue(i, gridHitInfo.Column, false);
                            }
                            if (BooCheckOnlySeleted)
                            {
                                for (int i = gridView2.RowCount; i >= 0; i--)
                                {
                                    gridView2.DeleteRow(i);
                                }
                            }
                        }
                        else
                        {
                            gridHitInfo.Column.Tag = "1";
                            if (_formType == FormType.ImportToLibrary || _formType == FormType.AddToLibrary)
                            {
                                SpectraLibraryItemVM preItem = null;
                                for (int i = 0; i < gridView2.RowCount; i++)
                                {
                                    SpectraLibraryItemVM item = gridView2.GetRow(i) as SpectraLibraryItemVM;
                                    if (preItem != null && SpectraLibraryHelper.CheckSameRefSpectra(item, preItem))
                                    {

                                    }
                                    else
                                    {
                                        gridView2.SetRowCellValue(i, gridHitInfo.Column, true);
                                    }
                                    preItem = item;
                                }
                            }
                            else
                            {
                                for (int i = 0; i < gridView2.RowCount; i++)
                                {
                                    gridView2.SetRowCellValue(i, gridHitInfo.Column, true);
                                }
                            }
                        }
                    }
                    gridView2.InvalidateColumnHeader(gridHitInfo.Column);
                
            }
           
        }

        private void CheckStateChanged(DevExpress.XtraGrid.Views.Grid.GridView view)
        {
            if (ChangeCheckbox != null)
            {
                ChangeCheckbox(view);
            }
        }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值