这个问题今天蛋疼了一天,搞出来了。相信以后还有人会碰到,网上虽然有方法但是不是很全。
首先要添加一个列,设计图如下,就是要在ColumentEdit的下拉框里面New下面找到CheckBox这个添加完了就会出现多选框,但是会发现这个多选框不可以多选,因为他是根据绑定值来控制的。
看后台代码:using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using DevExpress.XtraEditors.Repository;namespace SKD.Product.UI
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }        /* 
         * 多选一般情况用于多选删除等操作,本文只给出如何使用DEV的GridView控件添加多选功能,当然,
         * 后面如何取到多选的行,其实非常简单,就是循环当前的列表,查看多选列的值,如果值是选中的值 比如 1 ,那么就给当前行的ID记录下来,就可以删除了
         * 主要语句:this.gvExamDataItemList.GetRowCellValue(i, this.gvExamDataItemList.Columns["Sel"]).ToString(); ///获取复选框的值
         * 
            /// <summary>
            /// 删除(这里是我的方法,界面上按钮没放,大家可以一目了然的的看清楚,因为我当时绑定的是IList集合,所以删除用的是Remove) 
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void btnExamDataDelete_Click(object sender, EventArgs e)
            {
                ///循环查出选中要删除的行
                for (int i = 0; i < ExamDataList.Count; i++)
                {
                    string val = this.gvExamDataItemList.GetRowCellValue(i, this.gvExamDataItemList.Columns["Sel"]).ToString();
                    if (val == "1")
                    {
                        ExamDataList.Remove(this.gvExamDataItemList.GetRow(i));
                    }
                }
                //绑定到列表
                this.gcExamDataItemList.DataSource = ExamDataList;
                this.gcExamDataItemList.RefreshDataSource();
            }
         * 
         */
        private void Form1_Load(object sender, EventArgs e)
        {
/*这里面最重要的还是对应字段,和设置选中状态下的值和非选中状态下的值,很好理解。本文用的方法就是通过改变多选框列的值,来控制的选中和非选中*/
            ///设置多选列重要属性
            ///定义不选中状态的值
            RiceCheck.ValueUnchecked = 0;
            ///定义选中状态值
            RiceCheck.ValueChecked = 1;
            ///要绑定的字段(这个字段不一定非要是数据库里面读出来的,可以自己动态的添加一个字段主要用于设置多选列的值根据值来设置选中还是不选中状态)
            this.gcSelectCheck.FieldName = "Sel";
        }        private void gvExamDataItemList_Click(object sender, EventArgs e)
        {
            if (gvExamDataItemList.FocusedRowHandle >= 0)
            {
                ///首先获取到多选列的值
                string val = this.gvExamDataItemList.GetRowCellValue(gvExamDataItemList.FocusedRowHandle, this.gvExamDataItemList.Columns["Sel"]).ToString();
                if (val == "1")
                {
                    ///如果是已选中就设置未选中的值 0
                    val = "0";
                }
                else
                {
                    ///如果是未选中就设置选中的值 1
                    val = "1";
                }
                //设置所选中行的选框值(将状态值插入到多选列)
                this.gvExamDataItemList.SetRowCellValue(gvExamDataItemList.FocusedRowHandle, this.gvExamDataItemList.Columns["Sel"], val);
                ///获取到当前列里面的复选框控件
                RepositoryItemCheckEdit repositoryCheck = this.gvExamDataItemList.Columns[0].ColumnEdit as RepositoryItemCheckEdit;
                if (repositoryCheck != null)
                {
                    repositoryCheck.QueryCheckStateByValue += new DevExpress.XtraEditors.Controls.QueryCheckStateByValueEventHandler(RiceCheck_QueryCheckStateByValue);
                }
            }
        }        /// <summary>
        /// 委托设置复选框是否选中
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        void RiceCheck_QueryCheckStateByValue(object sender, DevExpress.XtraEditors.Controls.QueryCheckStateByValueEventArgs e)
        {
            string val = "";
            if (e.Value != null)
            {
                val = e.Value.ToString();
            }
            else
            {
                val = "False";//默认为不选中
            }
            ///这里面只是多加了几种判断,本文中是用 "1" 和 "0" 来验证是否选中
            switch (val)
            {
                case "True":
                    e.CheckState = CheckState.Checked;
                    break;
                case "False":
                    e.CheckState = CheckState.Unchecked;
                    break;
                case "Yes":
                    e.CheckState = CheckState.Checked;
                    break;
                case "No":
                    e.CheckState = CheckState.Unchecked;
                    break;
                case "1":
                    e.CheckState = CheckState.Checked;
                    break;
                case "0":
                    e.CheckState = CheckState.Unchecked;
                    break;
                default:
                    e.CheckState = CheckState.Unchecked;
                    break;
            }
            e.Handled = true;
        }
    }
}
这样差不多就可以完成多选了,devexpress多选框