本章主要解决如何在DataGrid的行内绑定ComboBox和ListBox。在数据集方面,先建立一个城市实体类,这个实体类有3个属性,分别是城 市名、城市区号、城市区县集合。城市区县集合是很多个区县的集合,所以区县类也是一个实体类包括2个属性分别为区县名和区县值。在这里城市类集合绑定到 DataGrid中,区县类集合绑定到ComboBox和ListBox中。

首先我们建立城市实体类和区县实体类集合:

  1. /// <summary>
  2. /// 城市实体类
  3. /// </summary>
  4. public class City
  5. {
  6. private string cityName;
  7. private string cityNum;
  8. private List<Combo> comboboxList;
  9. /// <summary>
  10. /// 城市名
  11. /// </summary>
  12. public string CityName
  13. {
  14. get { return cityName; }
  15. set { cityName = value; }
  16. }
  17. /// <summary>
  18. /// 城市电话区号
  19. /// </summary>
  20. public string CityNum
  21. {
  22. get { return cityNum; }
  23. set { cityNum = value; }
  24. }
  25. /// <summary>
  26. /// 城市区县类集合
  27. /// </summary>
  28. public List<Combo> ComboboxList
  29. {
  30. get { return comboboxList; }
  31. set { comboboxList = value; }
  32. }
  33. }
  34. /// <summary>
  35. /// ComboBox需要绑定的类
  36. /// </summary>
  37. public class Combo
  38. {
  39. private string name;
  40. private string value;
  41. /// <summary>
  42. /// 区县名
  43. /// </summary>
  44. public string Name
  45. {
  46. get { return name; }
  47. set { name = value; }
  48. }
  49. /// <summary>
  50. /// 区县值
  51. /// </summary>
  52. public string Value
  53. {
  54. get { return this.value; }
  55. set { this.value = value; }
  56. }
  57. }

然后我们在初始化城市类的集合List<>代码如下:

  1. //实例化City类集合
  2. List<City> cityList = new List<City>()
  3. {
  4. new City()
  5. {
  6. CityName="成都",
  7. CityNum="028",
  8. ComboboxList=new List<Combo>()
  9. {
  10. new Combo(){ Name="武侯区", Value="28"},
  11. new Combo(){ Name="青羊区", Value="281"},
  12. new Combo(){ Name="成华区", Value="283"},
  13. new Combo(){ Name="高新区", Value="282"},
  14. new Combo(){ Name="金牛区", Value="284"}
  15. }
  16. },
  17. new City()
  18. {
  19. CityName="北京",
  20. CityNum="010",
  21. ComboboxList=new List<Combo>()
  22. {
  23. new Combo(){ Name="朝阳区", Value="10"},
  24. new Combo(){ Name="海淀区", Value="103"},
  25. new Combo(){ Name="崇文区", Value="104"},
  26. new Combo(){ Name="丰台区", Value="105"},
  27. new Combo(){ Name="东城区", Value="120"}
  28. }
  29. }
  30. };

最后  this.ShowCityList.ItemsSource = cityList;将城市类集合绑定到DataGrid的ItemsSource上面。下面我们来观看DataGrid的XAML代码,在这里主要是在 DataGrid的DataGridTemplateColumn.CellTemplate模板下面添加DataTemplate数据模板,在这个模板 下面添加一个ComboBox或者ListBox控件,ComboBox和ListBox的ItemsSource绑定区县类集合的 ComboboxList属性( ItemsSource="{Binding ComboboxList}")。当然这样绑定下来显示的名称是不正确的。所以ComboBox控件还需要添加 ComboBox.ItemTemplate模板,此模板内部在绑定一个TextBlock控件,此控件的Text属性绑定区县类的Name属性 (Text="{Binding Name}")。

  1. <sdk:DataGrid HorizontalAlignment="Left" AutoGenerateColumns="False" Margin="28,71,0,0" Name="ShowCityList" VerticalAlignment="Top" Height="271" Width="324" >
  2. <sdk:DataGrid.Columns>
  3. <sdk:DataGridTextColumn Header="城市" Binding="{Binding CityName}" IsReadOnly="True" Width="108"/>
  4. <sdk:DataGridTemplateColumn Header="区县">
  5. <sdk:DataGridTemplateColumn.CellTemplate>
  6. <DataTemplate>
  7. <ComboBox Width="80" Height="24" ItemsSource="{Binding ComboboxList}" SelectionChanged="ComboBox_SelectionChanged">
  8. <ComboBox.ItemTemplate>
  9. <DataTemplate>
  10. <TextBlock Width="80" Text="{Binding Name}" ></TextBlock>
  11. </DataTemplate>
  12. </ComboBox.ItemTemplate>
  13. </ComboBox>
  14. </DataTemplate>
  15. </sdk:DataGridTemplateColumn.CellTemplate>
  16. </sdk:DataGridTemplateColumn>
  17. <sdk:DataGridTemplateColumn Header="区县级别">
  18. <sdk:DataGridTemplateColumn.CellTemplate>
  19. <DataTemplate>
  20. <ListBox Width="80" ItemsSource="{Binding ComboboxList}" >
  21. <ListBox.ItemTemplate>
  22. <DataTemplate>
  23. <TextBlock Width="80" Text="{Binding Name}"></TextBlock>
  24. </DataTemplate>
  25. </ListBox.ItemTemplate>
  26. </ListBox>
  27. </DataTemplate>
  28. </sdk:DataGridTemplateColumn.CellTemplate>
  29. </sdk:DataGridTemplateColumn>
  30. </sdk:DataGrid.Columns>
  31. </sdk:DataGrid>

在ComboBox中,我添加了一个事件SelectionChanged="ComboBox_SelectionChanged"来捕捉当 ComboBox改变选项之后获取ComboBox的值。下面请看ComboBox_SelectionChanged的事件处理代码:

  1. private void ComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
  2. {
  3. ComboBox combobox = sender as ComboBox;
  4. //选择到的项转化为类Combo。
  5. Combo combo = combobox.SelectedValue as Combo;
  6. MessageBox.Show(combo.Name+"的区号是:"+combo.Value);
  7. }

注意:使用ComboBox.SelectedValue获取到的是实体类Combo。

本例采用VS2010+Silverlight4.0编写,点击 SLDataTemplate.rar 下载实例源码,下面大家看效果图:

转载于:https://blog.51cto.com/chengxingliang/821957

18.DataGrid内绑定ComboBox和ListBox以及取值相关推荐

  1. python迭代器-迭代器取值-for循环-生成器-yield-生成器表达式-常用内置方法-面向过程编程-05...

    迭代器 迭代器 迭代: # 更新换代(其实也是重复)的过程,每一次的迭代都必须基于上一次的结果(上一次与这一次之间必须是有关系的) 迭代器: # 迭代取值的工具 为什么用迭代器: # 迭代器提供了一种 ...

  2. 稳扎稳打Silverlight(17) - 2.0数据之详解DataGrid, 绑定数据到ListBox

    [索引页] [源码下载] 稳扎稳打Silverlight(17) - 2.0数据之详解DataGrid, 详解ListBox 作者:webabcd 介绍 Silverlight 2.0 详解DataG ...

  3. c#(winform)中ComboBox和ListBox添加项完全解决

    c#(winform)中ComboBox和ListBox添加项完全解决 c#(winform)中ComboBox和ListBox添加项完全解决 刚开始用.net 的winform开发,发现好些控件都很 ...

  4. WPF DataGrid MVVM 绑定 SelectedCells

    首先增加一个附加属性类 DataGridSelectedCellsBehavior public class DataGridSelectedCellsBehavior{public static I ...

  5. winform c#绑定combobox下拉框 年度代码。

    winform c#绑定combobox下拉框 年度代码. comboBox1.Items.AddRange(new object[] { "2012", "2013&q ...

  6. datatable绑定comboBox显示数据[C#]

    实现功能:datatable绑定comboBox,在下拉菜单中显示对应数据 实现方法: //dataSet 转 dataTable 1.生成datatable,并为combox绑定数据源:comboB ...

  7. 断开式绑定ComboBox 关键命令 1201

    断开式绑定ComboBox 关键命令 1201 绑定数据 组合框对象.DataSource = 数据集.Tables[表名称]; 设置显示的内容源 组合框对象.DisplayMember = 数据表的 ...

  8. 用VBA向列表框(ComboBox或ListBox)中填加数据

    用VBA向列表框(ComboBox或ListBox)中填加数据 向列表框中填加数据的方法很多,下面根据实例介绍3种最常用到的方法: 图1 图2 如图1所示的下拉列表框(组合框),图2为其数据源,图2所 ...

  9. 图片浏览器开发日志-14(ComboBox和ListBox toolips实现)

    按:本来是想实现ComboBox的自绘,从而实现界面按钮的统一,网上ComboBox自绘的代码很多,因此很快达到了目的,后来发现有的字段内容超长,就想实现ComboBox 的tooltips功能.上网 ...

最新文章

  1. CMAKE设置INSTALL工程,分别设置头文件、Lib和DLL的输出路径
  2. 麒麟处理器是基于arm的吗_麒麟芯片是基于ARM构架,如果得不到授权华为还能活吗?...
  3. Android SDK下载失败-Android SDK Manager国内无法更新的解决方案
  4. Keil MDK-ARM下载 安装与和谐教程
  5. GDCM:读取流图像的测试程序
  6. Java开发代码规范之编程规约---命名风格
  7. 黑马程序员_java基础笔记(15)...银行业务调度系统_编码思路及代码
  8. 一名3年工作经验的程序员应该具备的技能
  9. 什么叫侧面指纹识别_屏幕指纹技术最强的3款全面屏手机,指纹识别技术手机你喜欢吗?...
  10. python-excel写入代码
  11. pyqt 子窗口控制主窗口绘图_PyQtGraph如何关闭绘图窗口/关闭所有绘图窗口?
  12. 自学mysql还是sql好_如何自学SQL?
  13. 支付宝查询对账单对账+解压并将数据读取解析入库
  14. 【报错记录】MybatisPlus报Mapped Statements collection does not contain value for...
  15. 调整VirtualBox虚拟磁盘VDI文件空间大小
  16. 沉痛哀悼我的弟弟-恽小华-南理工教授,候选中科院院士——一声叹息
  17. FMM 大战 LMM - SOFR 企稳 Part I
  18. 三、T100应付管理之采购应付-入库应付管理篇
  19. web自动登录方法汇总(转自老大指导)
  20. 红外图像处理-基于场景的非均匀矫正

热门文章

  1. angular2 学习二 最简单的模板
  2. Duo js 一个非常酷的前端打包工具
  3. HDU 2202 最大三角形
  4. 配置交换机etherchannel
  5. 利用XML实现通用WEB报表打印(转载)
  6. Matlab画地球剖面图,分享用matlab显示地震记录的波形变面积图
  7. Linux 文件夹含义(转)
  8. 利用Python的三元表达式解决Odoo中工资条中城镇、农村保险的问题
  9. 迷失只是暂时 2011-03-13
  10. ASP.NET自带机制不刷新页面