GridControl 選擇列、復選框全選(上)


說明:

    GirdControl 中添加一列,這一列不是寫在數據庫中的,而是代碼中添加的。

圖示:

 

底層類代碼:

#region GridControl 全選
        /// <summary>
        /// 是否選中
        /// </summary>
        private static bool chkState = false;
        //復選框列名稱
        private static string chkFileName = "";
        //復選框列寬
        private static int chkWidth = 30;
        //GridView 
        public static DevExpress.XtraGrid.Views.Grid.GridView GView = null;
        private DevExpress.XtraGrid.Views.Grid.GridView gView {
            get {
                if (GView == null)
                {
                    GView = new DevExpress.XtraGrid.Views.Grid.GridView();
                }
                return GView;
            }
            set {
                this.gView = value;
            }
        } 

        public static void GridCheckEdit(DevExpress.XtraGrid.Views.Grid.GridView gv, string checkFileName, int checkWidth)
        {
            if (gv != null) {                
            chkFileName = checkFileName;
            chkWidth = checkWidth;
            GView = gv;
            //不顯示復選框的列標題
            gv.Columns[chkFileName].OptionsColumn.ShowCaption = false;
              
            //復選框的形狀   gv.Columns[chkFileName].ColumnEdit 實例是 repositoryItemCheckEdit1              
            //repositoryItemCheckEdit1.CheckStyle = DevExpress.XtraEditors.Controls.CheckStyles.Standard;
            ////復選框加載的狀態     實心   空心   空心打勾
            //repositoryItemCheckEdit1.NullStyle = DevExpress.XtraEditors.Controls.StyleIndeterminate.Unchecked;
            //點擊事件
            gv.Click += new System.EventHandler(gv_Click);
            //畫列頭CheckEdit
            gv.CustomDrawColumnHeader += new DevExpress.XtraGrid.Views.Grid.ColumnHeaderCustomDrawEventHandler(gv_CustomDrawColumnHeader);
            gv.DataSourceChanged += new EventHandler(gv_DataSourceChanged);
            }
        }

        private static void gv_Click(object sender, EventArgs e)
        {
            if (ClickGridCheckBox(GView, chkFileName, chkState))
            {
                chkState = !chkState;
            }
        }

        private static void gv_CustomDrawColumnHeader(object sender, DevExpress.XtraGrid.Views.Grid.ColumnHeaderCustomDrawEventArgs e)
        {
            if (e.Column != null && e.Column.FieldName ==chkFileName)
            {
                e.Info.InnerElements.Clear();
                e.Painter.DrawObject(e.Info);
                DrawCheckBox(e, chkState);
                e.Handled = true;
            } 
        }

        private static void gv_DataSourceChanged(object sender, EventArgs e)
        {
            DevExpress.XtraGrid.Columns.GridColumn column = GView.Columns.ColumnByFieldName(chkFileName);
            if (column != null)
            {
                column.Width = chkWidth;
                column.OptionsColumn.ShowCaption = false;
                column.ColumnEdit = new DevExpress.XtraEditors.Repository.RepositoryItemCheckEdit();
            } 
        }

        private static void DrawCheckBox(DevExpress.XtraGrid.Views.Grid.ColumnHeaderCustomDrawEventArgs e, bool chk)
        {
           DevExpress.XtraEditors.Repository.RepositoryItemCheckEdit repositoryCheck = e.Column.ColumnEdit as DevExpress.XtraEditors.Repository.RepositoryItemCheckEdit;
            if (repositoryCheck != null)
            {
                System.Drawing.Graphics g = e.Graphics;
                System.Drawing.Rectangle r = e.Bounds;

                DevExpress.XtraEditors.ViewInfo.CheckEditViewInfo info;
                DevExpress.XtraEditors.Drawing.CheckEditPainter painter;
                DevExpress.XtraEditors.Drawing.ControlGraphicsInfoArgs args;
                info = repositoryCheck.CreateViewInfo() as DevExpress.XtraEditors.ViewInfo.CheckEditViewInfo;

                painter = repositoryCheck.CreatePainter() as DevExpress.XtraEditors.Drawing.CheckEditPainter;
                info.EditValue = chk;
                info.Bounds = r;
                info.CalcViewInfo(g);
                args = new DevExpress.XtraEditors.Drawing.ControlGraphicsInfoArgs(info, new DevExpress.Utils.Drawing.GraphicsCache(g), r);
                painter.Draw(args);
                args.Cache.Dispose();
            }
        }

        private static bool ClickGridCheckBox(DevExpress.XtraGrid.Views.Grid.GridView gridView, string fieldName, bool currentStatus)
        {
            bool result = false;
            if (gridView != null)
            {
                //禁止排序 
                gridView.ClearSorting();

                gridView.PostEditor();
                DevExpress.XtraGrid.Views.Grid.ViewInfo.GridHitInfo info;
                System.Drawing.Point pt = gridView.GridControl.PointToClient(Control.MousePosition);
                info = gridView.CalcHitInfo(pt);
                if (info.InColumn && info.Column != null && info.Column.FieldName == fieldName)
                {
                    for (int i = 0; i < gridView.RowCount; i++)
                    {
                        gridView.SetRowCellValue(i, fieldName, !currentStatus);
                    }
                    return true;
                }
            }
            return result;
        } 

        #endregion

 

前台調用:

注意:GridControl綁定前,手動增加一列,增加完成之后,在綁定。

   //添加一列
            dt.Columns.Add("chk", System.Type.GetType("System.Boolean"));
            dt.Columns["chk"].DefaultValue = Boolean.FalseString;

            gridControl1.DataSource = dt;

            Functionjsj.GridCheckEdit(gv, "chk", 50);

chk 圖例:

 

版權聲明:本文為博主原創文章,未經博主允許不得轉載。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM