????? 无论在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 NativeAddr103 {104 get;105 set;106 }107 108 /// <summary>109 /// 教育程度Id110 /// </summary>111 public Guid EducationId112 {113 get;114 set;115 }116 117 /// <summary>118 /// 专业119 /// </summary>120 public string Major121 {122 get;123 set;124 }125 126 /// <summary>127 /// 毕业院校128 /// </summary>129 public string School130 {131 get;132 set;133 }134 135 /// <summary>136 /// 地址137 /// </summary>138 public string Address139 {140 get;141 set;142 }143 144 /// <summary>145 /// 基本工资146 /// </summary>147 public int BaseSalary148 {149 get;150 set;151 }152 153 /// <summary>154 /// Email155 /// </summary>156 public string Email157 {158 get;159 set;160 }161 162 /// <summary>163 /// 有效身份证号164 /// </summary>165 public string IdNum166 {167 get;168 set;169 }170 171 /// <summary>172 /// 联系电话173 /// </summary>174 public string TelNum175 {176 get;177 set;178 }179 180 /// <summary>181 /// 紧急联系人信息182 /// </summary>183 public string EmergencyContact184 {185 get;186 set;187 }188 189 190 /// <summary>191 /// 职位192 /// </summary>193 public string Position194 {195 get;196 set;197 }198 199 /// <summary>200 /// 合同起始时间201 /// </summary>202 public DateTime ContractStartDay203 {204 get;205 set;206 }207 208 /// <summary>209 /// 合同到期时间210 /// </summary>211 public DateTime ContractEndDay212 {213 get;214 set;215 }216 217 /// <summary>218 /// 简历219 /// </summary>220 public string Resume221 {222 get;223 set;224 }225 226 /// <summary>227 /// 备注228 /// </summary>229 public string Remarks230 {231 get;232 set;233 }234 235 public byte[] Photo236 {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 Department10 {11 public Guid Id12 {13 get;14 set;15 }16 17 public string Name18 {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对象。
?
转载于:https://www.cnblogs.com/magicyu/p/3273389.html