开发者论坛

 找回密码
 注册 (请使用非IE浏览器)
查看: 13297|回复: 59

关于ComboBoxEdit如何绑定实体集问题

  [复制链接]

0

精华

490

贡献

729

赞扬

管理员

Rank: 45Rank: 45Rank: 45Rank: 45Rank: 45

帖子
158
软币
3816
在线时间
576 小时
注册时间
2015-6-30
发表于 2017-2-27 10:40:39 | 显示全部楼层 |阅读模式
本帖最后由 rzt_tao 于 2017-2-27 10:39 编辑

DevExpress 的ComboBoxEdit的Item虽然是Object类型,但是绑定实体集的时候,显示的Item是类的名称,这样并不是我们想要的,我们渴望的是能够看到指定那个属性字段,SelectItem的时候返回的是一个实体,
大家想一想为什么我们看到的是下拉类别是类的名称?因为这个类的ToString方法,知道这个切入点就好办了,我们就从重写类的ToString方法入手。
定义一个Student类,重写其ToString方法:

[C#] 纯文本查看 复制代码
class student
{
public string name { get; set; }
public int id { get; set; }
/// <summary>
/// 重写ToString的方法
/// </summary>
/// <returns></returns>
public override string ToString()
{
return name;
}

当然,大伙更喜欢能够随时指定某个属性字段作为其显示的Item,这个很简单,定义一个构造函数,利用反射就可以了。
游客,如果您要查看本帖隐藏内容请回复

解决关键核心问题,下面就正式使用。
游客,如果您要查看本帖隐藏内容请回复


测试结果:
_L`HK9[{7CH%1SM)7FHKV(2.png
3ZCTQZGW_4P48}8@[@ILOJ0.png
当然有些人觉得这样有点麻烦,其实DevExpress提供了其他的控件操作,LookUpEdit和GridLookUpEdit,这个两个控件都提供了直接绑定数据源的属性设置,
也允许设置指定列为显示字段和实际值字段,这样就轻松多了。
大致设置如下(gridlookUpedit类似具体可以网上一搜一大把):

[C#] 纯文本查看 复制代码
class student
        {
            private string _displayField;
            public string name { get; set; }
            public int id { get; set; }
            public student() { }
            /// <summary>
            /// 显示属性字段名字
            /// </summary>
            /// <param name="displayField"></param>
            public student(string displayField)
            {
                _displayField = displayField;
            }
            /// <summary>
            /// 重写ToString的方法
            /// </summary>
            /// <returns></returns>
            public override string ToString()
            {
                if (string.IsNullOrEmpty(_displayField))
                    return this.GetType().Name;
                else
                    return this.GetType().GetProperty(_displayField).GetValue(this, null)?.ToString();
            }
        }

设置显示列大致如下:
lookUpEdit设置:
{NTIIR(PHU4Q5NUXP8DM01D.png
gridLookUpEdit设置(其实就是内嵌了一个GridControl的控件,设置跟设置GridView方式一样的)

U40$X_A$U6(J4PH1GW4I7NG.png

评分

参与人数 5贡献 +6 赞扬 +5 收起 理由
BaronQiu + 1 很给力
Agatha + 1 淡定
lujiachao + 1 实现方式还是挺不错的,不过这种方法感觉不.
1002068421 + 1 感谢分享
羽叶 + 1 很给力

查看全部评分

回复

使用道具 举报

0

精华

386

贡献

3991

赞扬

正版授权组

Rank: 14Rank: 14Rank: 14Rank: 14

帖子
323
软币
18137
在线时间
4643 小时
注册时间
2013-8-28
发表于 2017-2-27 11:12:41 | 显示全部楼层
看看有啥好办法
回复

使用道具 举报

0

精华

0

贡献

12

赞扬

帖子
19
软币
149
在线时间
7 小时
注册时间
2016-9-27
发表于 2017-3-14 13:30:57 | 显示全部楼层
只能先回复了
精通两年以上多人在线开的扩展开发验标准库的使用能完成相应
回复

使用道具 举报

0

精华

110

贡献

20

赞扬

正版授权组

Rank: 14Rank: 14Rank: 14Rank: 14

帖子
39
软币
424
在线时间
45 小时
注册时间
2016-6-29
发表于 2017-3-16 13:12:07 | 显示全部楼层
看看有啥好办法
回复

使用道具 举报

0

精华

0

贡献

36

赞扬

帖子
36
软币
282
在线时间
18 小时
注册时间
2016-11-15
发表于 2017-4-7 16:54:43 | 显示全部楼层
不知道为什么微软自带的是有这个功能的,在DEV怎么就没了呢 不是继承的吗
回复

使用道具 举报

0

精华

490

贡献

729

赞扬

管理员

Rank: 45Rank: 45Rank: 45Rank: 45Rank: 45

帖子
158
软币
3816
在线时间
576 小时
注册时间
2015-6-30
 楼主| 发表于 2017-4-13 10:44:30 | 显示全部楼层
775253959 发表于 2017-4-7 16:54
不知道为什么微软自带的是有这个功能的,在DEV怎么就没了呢 不是继承的吗

自己看看基类就知道不是继承,Devexpress自己开发的一套控件。
回复

使用道具 举报

0

精华

0

贡献

21

赞扬

帖子
18
软币
264
在线时间
33 小时
注册时间
2014-12-12
发表于 2017-4-13 10:47:12 | 显示全部楼层
看看,正用到
回复

使用道具 举报

0

精华

19

贡献

352

赞扬

帖子
142
软币
1717
在线时间
183 小时
注册时间
2016-9-10
发表于 2017-4-13 10:48:10 | 显示全部楼层
一直用lookup来写,。。。牛逼
回复

使用道具 举报

0

精华

418

贡献

346

赞扬

正版授权组

Rank: 14Rank: 14Rank: 14Rank: 14

帖子
213
软币
7131
在线时间
1173 小时
注册时间
2013-6-9
发表于 2017-4-13 10:59:08 | 显示全部楼层
正好需要看看
回复

使用道具 举报

0

精华

0

贡献

0

赞扬

帖子
35
软币
375
在线时间
35 小时
注册时间
2016-7-23
发表于 2017-6-8 19:29:40 | 显示全部楼层
厉害了我的涛哥
回复

使用道具 举报

0

精华

0

贡献

0

赞扬

帖子
18
软币
150
在线时间
11 小时
注册时间
2017-7-17
发表于 2017-8-14 11:13:36 | 显示全部楼层
要不要这样啊
回复

使用道具 举报

0

精华

206

贡献

76

赞扬

帖子
96
软币
930
在线时间
108 小时
注册时间
2013-9-1
发表于 2017-8-21 20:08:26 | 显示全部楼层
这个用的非常频繁,学习了,感谢。
回复

使用道具 举报

0

精华

0

贡献

92

赞扬

帖子
83
软币
982
在线时间
107 小时
注册时间
2017-3-20
发表于 2017-10-20 15:51:46 | 显示全部楼层
谢谢楼主分享
回复

使用道具 举报

0

精华

400

贡献

39

赞扬

帖子
68
软币
1279
在线时间
204 小时
注册时间
2016-2-15
发表于 2017-10-27 10:17:10 | 显示全部楼层
学习了,感谢分享~~~~~~~~
回复

使用道具 举报

0

精华

0

贡献

1

赞扬

帖子
20
软币
132
在线时间
9 小时
注册时间
2017-9-8
发表于 2017-10-27 13:35:46 | 显示全部楼层
等我看了隐藏内容再给你回复
回复

使用道具 举报

0

精华

0

贡献

1

赞扬

帖子
20
软币
132
在线时间
9 小时
注册时间
2017-9-8
发表于 2017-10-27 15:46:17 | 显示全部楼层
我这里说一种其他方法啊!
imageComboBoxEditAccEmpId.Properties.Items.Add
(new ImageComboBoxItem(drAccountType["NAME"].ToString(), drAccountType["ID"].ToString(), -1));
NAME,ID就是方法传过来的datetable的字段。
其中ID是绑定的字段,NAME是下拉显示的字段。
这样就会出现一个问题,下拉,我字符串拼接 ID,NAME 。但显示我只想要他显示NAME。怎么解决呢?
我在imagecombox上放了一个textedit写了个方法就解决了。
#region imageComboBoxEditAccEmpId 值改变事件
        private void imageComboBoxEditAccEmpId_EditValueChanged(object sender, EventArgs e)
        {
            string str = imageComboBoxEditAccEmpId.Text.ToString();
            if (str != "" && str.Contains(","))
            {
                 string[] sArray = str.Split(',');
                 textEditShow.Text = sArray[1];
               
            }
        }

        #endregion
如图所示

QQ图片20171027154450.png
回复

使用道具 举报

0

精华

0

贡献

913

赞扬

帖子
84
软币
3013
在线时间
308 小时
注册时间
2017-5-17
发表于 2018-1-30 10:10:12 | 显示全部楼层
非常需要的,谢谢
回复

使用道具 举报

0

精华

0

贡献

0

赞扬

帖子
5
软币
80
在线时间
4 小时
注册时间
2018-4-16
发表于 2018-5-3 15:09:07 | 显示全部楼层
THANKS FOR SHARE
回复

使用道具 举报

0

精华

0

贡献

0

赞扬

帖子
11
软币
153
在线时间
8 小时
注册时间
2018-7-10
发表于 2018-7-10 10:58:06 | 显示全部楼层
yys,非常感谢!
回复

使用道具 举报

0

精华

6

贡献

2186

赞扬

帖子
145
软币
6429
在线时间
542 小时
注册时间
2015-3-17
发表于 2018-7-10 11:20:19 | 显示全部楼层
这个学习一下
回复

使用道具 举报

0

精华

0

贡献

0

赞扬

帖子
15
软币
131
在线时间
10 小时
注册时间
2018-7-19
发表于 2018-7-19 15:01:31 | 显示全部楼层
想学习学习,最近也遇到了问题,希望是我需要的
回复

使用道具 举报

0

精华

3

贡献

38

赞扬

帖子
75
软币
351
在线时间
27 小时
注册时间
2017-8-26
发表于 2018-8-27 16:08:05 | 显示全部楼层
看看如何实现
回复

使用道具 举报

Archiver|手机版|小黑屋|开发者网 ( 苏ICP备08004430号-2 )
版权所有:南京韵文教育信息咨询有限公司

GMT+8, 2024-4-24 14:52

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表