DevExpress的Grid加一列checkbox用来多选

来源:互联网 发布:数控铣削编程加图案 编辑:程序博客网 时间:2024/05/17 11:34

DevExpress刚开始用,整理了一个在左边加一列checkbox用来多选记录的方法,分享给大家。效果如下图:



首先要在设计器中加一列select,如图:

 


 
在绑定DataTable时要加一列,否则没办法多选,代码如下:


        /// <summary>
        /// 在绑定的DataTable上加一列checkbox供选择多行
        /// </summary>
        /// <param name="dt">数据源,不会被改变</param>
        /// <param name="fieldName">选择列的域名</param>
        /// <param name="defaultChooseState">是否默认全选</param>
        /// <returns>加一列的绑定数据源</returns>
        public static DataTable AddSelectColumnToDataTable(DataTable dt, string fieldName, bool defaultChooseState = false)
        {
            DataTable returnDt = dt.Copy();


            if(returnDt.Columns.Contains(fieldName))
            {
                throw new Exception("DataTable中要添加的列已存在【" + fieldName + "】字段,请更改!");
            }


            //一定要有这一步,否则列表无法多选
            returnDt.Columns.Add(fieldName, typeof(bool));


            //一定要有这一步,否则无法获取行是否被选中
            for (int rowNO = 0; rowNO < returnDt.Rows.Count; rowNO++)
            {
                returnDt.Rows[rowNO][fieldName] = defaultChooseState;
            }


            return returnDt;
        }


获取选中行数据的方法:


        /// <summary>
        /// 获取打钩列选中的数据集合
        /// </summary>
        /// <typeparam name="T">绑定数据类型</typeparam>
        /// <param name="gridView">表格</param>
        /// <param name="selectFieldName">打钩列域名</param>
        /// <returns>选中行绑定的数据</returns>
        public static List<T> GetSelectRowData<T>(GridView gridView, string selectFieldName) where T : new()
        {
            //必须要有这句,否则无法获取到最后编辑的记录 
            if (!gridView.IsNewItemRow(gridView.FocusedRowHandle))
            {
                gridView.CloseEditor();
                //gridView_class.UpdateCurrentRow();
            }


            List<T> tList = new List<T>();
            for (int rowNo = 0; rowNo < gridView.RowCount; rowNo++)
            {
                T t = new T();
                DataRow row = gridView.GetDataRow(rowNo);


                if (row != null && (bool)row[selectFieldName] == true)
                {
                    ChangeDataRowToEntity<T>(row, t);
                    tList.Add(t);
                }
            }
            return tList;
        } 
 
全选、取消全选的方法:


        /// <summary>
        /// 全选
        /// </summary>
        /// <param name="gridView"></param>
        /// <param name="fieldName">打钩列域名</param>
        public static void CheckAll(GridView gridView, string fieldName)
        {
            for (int i = 0; i < gridView.DataRowCount; i++)
            {
                gridView.SetRowCellValue(i, gridView.Columns[fieldName], true);
            }
        }


        /// <summary>
        /// 全不选
        /// </summary>
        /// <param name="gridView"></param>
        /// <param name="fieldName">打钩列域名</param>
        public static void UnCheckAll(GridView gridView, string fieldName)
        {
            for (int i = 0; i < gridView.DataRowCount; i++)
            {
                gridView.SetRowCellValue(i, gridView.Columns[fieldName], false);
            }

        }




0 0
原创粉丝点击