SelectedValue,SelectedValuePath,SelectedValueBinding,DisplayMemberPath讲解_.NET_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > .NET > SelectedValue,SelectedValuePath,SelectedValueBinding,DisplayMemberPath讲解

SelectedValue,SelectedValuePath,SelectedValueBinding,DisplayMemberPath讲解

 2013/8/22 23:06:35  magicyu  博客园  我要评论(0)
  • 摘要:无论在Winform、WPF、ASP.NET中,数据绑定是我们经常使用的一个重要技术,我们经常会把相关类动态显示绑定到UI界面中,其中有几个比较重要的属性需要大家灵活运用。那Combox来说明有两个属性DisplayMemberPath和SelectedValuePath,前者是显示控件中每个元素Item的属性,即你想把类中的哪个属性显示出来,就用这个关键字DisplayMemberPath,而SelectedValuePath表示在combox中选中Item的值是类中的哪个属性
  • 标签:ERP

      无论在Winform、WPF、ASP.NET中,数据绑定是我们经常使用的一个重要技术,我们经常会把相关类动态显示绑定到UI界面中,其中有几个比较重要的属性需要大家灵活运用。

     那Combox来说明有两个属性DisplayMemberPath和SelectedValuePath,前者是显示控件中每个元素Item的属性,即你想把类中的哪个属性显示出来,就用这个关键字DisplayMemberPath,而SelectedValuePath表示在combox中选中Item的值是类中的哪个属性,即每个Item的SelectedValue的值,比如一个学生类
class student
{
    public int id;
    public string name;
}
一般情况下ComboBox.Itemsource=StudentList设置完之后,再设置ComboBox.DisplayMemberPath="name";ComboBox.SelectedValuePath="id";
这样每个combobox的item的value就是id,但它显示出来的是name,当然类似的ListBox等也可以运用这些属性。

     现在那我写过的一个小项目说明一个比较复杂的绑定,项目中有两个类Employee、Department,我们知道每位员工都有他所属的部门,没个部门都有若干的员工。

 

   

 

 

 

在项目中我们通过一些特定的条件进行搜索将搜索出来的Employee绑定到一个DataGrid上,我的意思是说想通过Employee表中的DepartmentId这个表示列,从Department表中查询并返回Name属性显示到DataGrid的列上去。

Employee:

 

  1 using System;
  2 using System.Collections.Generic;
  3 using System.Linq;
  4 using System.Text;
  5 using System.Threading.Tasks;
  6 
  7 namespace HR.Model
  8 {
  9     public class Employee
 10     {
 11         public Guid Id
 12         {
 13             get;
 14             set;
 15         }
 16 
 17   /// <summary>
 18         /// 部门Id
 19         /// </summary>
 20         public Guid DepartmentId
 21         {
 22             get;
 23             set;
 24         }
 25 
 26    //剩下的暂不需要看
 27 
 28         /// <summary>
 29         /// 工号
 30         /// </summary>
 31         public string Number
 32         {
 33             get;
 34             set;
 35         }
 36 
 37         public string Name
 38         {
 39             get;
 40             set;
 41         }
 42 
 43         /// <summary>
 44         /// 性别Id
 45         /// </summary>
 46         public Guid GenderId
 47         {
 48             get;
 49             set;
 50         }
 51 
 52         //因为图片如果一次性读取到Model中会非常耗内存,因此需要的时候再去单独读取,不在Model中建字段
 53 
 54         /// <summary>
 55         /// 出生日期
 56         /// </summary>
 57         public DateTime BirthDay
 58         {
 59             get;
 60             set;
 61         }
 62 
 63         /// <summary>
 64         /// 入职日期
 65         /// </summary>
 66         public DateTime InDate
 67         {
 68             get;
 69             set;
 70         }
 71 
 72         /// <summary>
 73         /// 婚姻状态Id
 74         /// </summary>
 75         public Guid MarriageId
 76         {
 77             get;
 78             set;
 79         }
 80 
 81         /// <summary>
 82         /// 政治面貌Id
 83         /// </summary>
 84         public Guid PartyStatusId
 85         {
 86             get;
 87             set;
 88         }
 89 
 90         /// <summary>
 91         /// 民族
 92         /// </summary>
 93         public string Nationality
 94         {
 95             get;
 96             set;
 97         }
 98 
 99         /// <summary>
100         /// 籍贯
101         /// </summary>
102         public string NativeAddr
103         {
104             get;
105             set;
106         }
107 
108         /// <summary>
109         /// 教育程度Id
110         /// </summary>
111         public Guid EducationId
112         {
113             get;
114             set;
115         }
116 
117         /// <summary>
118         /// 专业
119         /// </summary>
120         public string Major
121         {
122             get;
123             set;
124         }
125 
126         /// <summary>
127         /// 毕业院校
128         /// </summary>
129         public string School
130         {
131             get;
132             set;
133         }
134 
135         /// <summary>
136         /// 地址
137         /// </summary>
138         public string Address
139         {
140             get;
141             set;
142         }
143 
144         /// <summary>
145         /// 基本工资
146         /// </summary>
147         public int BaseSalary
148         {
149             get;
150             set;
151         }
152 
153         /// <summary>
154         /// Email
155         /// </summary>
156         public string Email
157         {
158             get;
159             set;
160         }
161 
162         /// <summary>
163         /// 有效身份证号
164         /// </summary>
165         public string IdNum
166         {
167             get;
168             set;
169         }
170 
171         /// <summary>
172         /// 联系电话
173         /// </summary>
174         public string TelNum
175         {
176             get;
177             set;
178         }
179 
180         /// <summary>
181         /// 紧急联系人信息
182         /// </summary>
183         public string EmergencyContact
184         {
185             get;
186             set;
187         }
188 
189       
190         /// <summary>
191         /// 职位
192         /// </summary>
193         public string Position
194         {
195             get;
196             set;
197         }
198 
199         /// <summary>
200         /// 合同起始时间
201         /// </summary>
202         public DateTime ContractStartDay
203         {
204             get;
205             set;
206         }
207 
208         /// <summary>
209         /// 合同到期时间
210         /// </summary>
211         public DateTime ContractEndDay
212         {
213             get;
214             set;
215         }
216 
217         /// <summary>
218         /// 简历
219         /// </summary>
220         public string Resume
221         {
222             get;
223             set;
224         }
225 
226         /// <summary>
227         /// 备注
228         /// </summary>
229         public string Remarks
230         {
231             get;
232             set;
233         }
234 
235         public byte[] Photo
236         {
237             get;
238             set;
239         }
240     }
241 }

 

Department类:

 

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6 
 7 namespace HR.Model
 8 {
 9     public class Department
10     {
11         public Guid Id
12         {
13             get;
14             set;
15         }
16 
17         public string Name
18         {
19             get;
20             set;
21         }
22     }
23 }

 

 

UI界面:

 

在UI界面中的代码:

1  <DataGridComboBoxColumn Header="部门" Width="100" SelectedValueBinding="{Binding DepartmentId}" SelectedValuePath="Id"
2                                         DisplayMemberPath="Name" x:Name="columnDepartmentId"></DataGridComboBoxColumn>

这块是将DataGrid的某一个数据列(ComboxColumn类型的列),普通的DataTextColum无法完成负责的绑定。

将SelectedValueBinding绑定到DepartmentId,因为我们通过搜索返回的是Employee类型,而Employee对象中有DepartmentId属性,然后SelectedValuePath=Id表示我们是通过Id这个关键字进行搜索,搜索Department中的Id属性,然后以Name属性进行显示。

 

 

 

 

 我们在窗体的Window_Loaded方法中初始化控件,把所有数据库中的Department对象绑定到控件DataGrid中的ComboxColumn中。

后台代码:

然后通过点击搜索按钮的点击事件对DataGrid控件进行再次绑定。

后台代码:

大家只看最后一句就行,即通过点击把一些搜索条件记录下来,然后进行Sql select操作,然后返回特定的Employee对象。

 

发表评论
用户名: 匿名