黑马程序员技术交流社区

标题: 控件绑定问题 [打印本页]

作者: 贰的23次方    时间: 2014-3-22 10:29
标题: 控件绑定问题
本帖最后由 贰的23次方 于 2014-3-22 18:09 编辑

1.我在数据库中建好了两张表Info(ID,Name,Category)和Employee(ID,Name,GenderId)
Info表中有如下记录(1,男,性别)(2,女,性别)
Employee表中记录如下(1,张三,2)(2,李四,1)(3,王五,2)
2.在窗口加载时,我用DataGrid控件把Employee表中的成员都显示出来如下(1,张三,女)性别字段显示的不是ID,而是Name

问题:DataGrid地列控件应该怎么绑定?


作者: 百川    时间: 2014-3-22 11:03
不明白楼主说的意思,楼主是打算怎么显示数据?是想显示genderId么?
作者: 贰的23次方    时间: 2014-3-22 11:21
百川 发表于 2014-3-22 11:03
不明白楼主说的意思,楼主是打算怎么显示数据?是想显示genderId么?

想在窗口加载时显示(1,张三,女)
作者: 百川    时间: 2014-3-22 11:50
本帖最后由 百川 于 2014-3-22 12:14 编辑

使用left join语句
Select e.ID as ID,e.Name as Name,c.Name as Sex from 员工表 e left join 性别表 c on e.GenderId=c.ID


得到结果是一张新的表,然后用视频里面的sqlHelper的datatable方法查一下就行了。
不行的话你把源码发一下我给你改

作者: zou5268237    时间: 2014-3-22 12:49
你判断一下 如果是2就显示女,1就显示男
作者: 白夜行    时间: 2014-3-22 13:44
窗口中数据绑定时,你可以使用DataGrid中的DataGridComboBoxColumn列,它可以让数据绑定的是Employee的GenderId属性,但是显示的是Info表中的Name属性。
DataGrid部分的代码如下:
  1.             <DataGrid AutoGenerateColumns="False" IsReadOnly="True" Name="dataGrid">
  2.                 <DataGrid.Columns>
  3.                     <DataGridTextColumn Header="编号" Binding="{Binding Id}" Width="70"></DataGridTextColumn>
  4.                     <DataGridTextColumn Header="姓名" Binding="{Binding Name}" Width="70"></DataGridTextColumn>
  5.                     <DataGridComboBoxColumn x:Name="cbGender" Header="性别" Width="40" SelectedValueBinding="{Binding GenderId}"  DisplayMemberPath="Name" SelectedValuePath="Id"></DataGridComboBoxColumn>
  6.                 </DataGrid.Columns>
  7.             </DataGrid>
复制代码

其中,ComboBoxColumn的SelectedValueBinding绑定的是Employee对象的GenderId, DisplayMemberPath和SelectedValuePath的值分别的是Info表查询出的Name和Id。

前台事件里的部分代码如下:
  1. cbGender.ItemsSource = new IdNameDAL().GetByCategory("性别");
复制代码

在窗口加载时,你得先通过GetByCategory从数据库Info表中查出来是性别的数据条目,它的返回值可以是一个List或数组。
然后将员工的数据给dataGrid的ItemsSource,这样,控件已经设定好的绑定就能将数据显示出来了
  1. Employee[] emps = new EmployeeDAL().ListAll();
  2.             dataGrid.ItemsSource = emps;
复制代码

代码没测试过,你自己测试一下
作者: zhangcheng5468    时间: 2014-3-22 16:33
去控件属性中自己配置一下就可以啦
作者: 贰的23次方    时间: 2014-3-22 17:15
zou5268237 发表于 2014-3-22 12:49
你判断一下 如果是2就显示女,1就显示男

这个有点麻烦了,如果类别是学历,记录如下
(3,小学,学历)
(4,中学,学历)
……
(7,博士,学历)
不够灵活
作者: 贰的23次方    时间: 2014-3-22 17:19
百川 发表于 2014-3-22 11:50
使用left join语句
Select e.ID as ID,e.Name as Name,c.Name as Sex from 员工表 e left join 性别表 c on ...

感谢回答,这个方法,还看起来可以实现,但是我想要的是
.NET视频第五季(二)员工表增删改的那种效果,感谢回答




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2