视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
GridView如何实现一列显示不同的控件类型
2025-09-28 02:14:20 责编:小OO
文档
在很多DevExpress的使用例子里面,我们可以看到,基于GridView实现的不同控件展示的时候,每一列的控件类型都是一样的,如果我要某一列的一行让用户可以从下列列表选择选项,而其他行不可选择,那我们可以实现这种效果吗,应该如何实现?

1、GridView实现的显示效果

例如下面的效果就是我希望达到的,在第一行的流程处理人列允许用户选择,其他行禁止用户选择。

单用户单击第一行的“流程处理人”列的时候,弹出一个列表供用户选择,选择后显示具体的人员的姓名即可。

2、功能实现具体步骤

实现上面所说的功能,最主要就是创建两个In-place(嵌入)的编辑器,一个用于特定行的编辑,一个用于其他行的编辑。如下所示。

从上面可以看到,我添加了一个LookupEdit控件和一个TextEdit的控件,分别用来操作不同的行列内容。

然后就是需要实现gridView的单元格自定义编辑事件,如下所示。

            this.gridView1.CustomRowCellEdit += new DevExpress.XtraGrid.Views.Grid.CustomRowCellEditEventHandler(this.gridView1_CustomRowCellEdit);

然后在事件实现里面,对不同的行,指定不同的编辑器,如下代码所示。

        private void gridView1_CustomRowCellEdit(object sender, DevExpress.XtraGrid.Views.Grid.CustomRowCellEditEventArgs e)

        {

            if (e.Column.FieldName == "ProcUser")

            {

                if (e.RowHandle == 0)

                {

                    e.RepositoryItem = this.repositoryddlProcUser;

                }

                else               {

                    e.RepositoryItem = this.repositorytxtProcUser;

                }

            }

        }

最后,还需要实现这两个内嵌的编辑控件的ParseValue事件,如下所示。

            this.repositorytxtProcUser.ParseEditValue += newDevExpress.XtraEditors.Controls.ConvertEditValueEventHandler(repositorytxtProcUser_ParseEditValue);

            this.repositoryddlProcUser.ParseEditValue += new DevExpress.XtraEditors.Controls.ConvertEditValueEventHandler(repositoryProcUser_ParseEditValue);

        void repositorytxtProcUser_ParseEditValue(objectsender, DevExpress.XtraEditors.Controls.ConvertEditValueEventArgs e)

        {

            e.Value = "人员未定";

        }

        void repositoryProcUser_ParseEditValue(objectsender, DevExpress.XtraEditors.Controls.ConvertEditValueEventArgs e)

        {

            if (e.Value isString)

            {

                int result = 0;

                if (Int32.TryParse((String)e.Value, outresult))

                {

                    e.Value = result;

                    e.Handled = true;

                }

            }

        }

这样,我们就能实现上面所说的效果,可以在某行列里面显示下拉列表,其他的行列显示文本框,并且文本框不可以编辑的操作了。

通过以上的操作,我们还可以为某行列指定更多不同类型的内嵌编辑控件,从而丰富我们的列表单元格编辑操作。下载本文

显示全文
专题