18.DataGrid内绑定ComboBox和ListBox以及取值
本章主要解决如何在DataGrid的行内绑定ComboBox和ListBox。在数据集方面,先建立一个城市实体类,这个实体类有3个属性,分别是城 市名、城市区号、城市区县集合。城市区县集合是很多个区县的集合,所以区县类也是一个实体类包括2个属性分别为区县名和区县值。在这里城市类集合绑定到 DataGrid中,区县类集合绑定到ComboBox和ListBox中。
首先我们建立城市实体类和区县实体类集合:
- /// <summary>
- /// 城市实体类
- /// </summary>
- public class City
- {
- private string cityName;
- private string cityNum;
- private List<Combo> comboboxList;
- /// <summary>
- /// 城市名
- /// </summary>
- public string CityName
- {
- get { return cityName; }
- set { cityName = value; }
- }
- /// <summary>
- /// 城市电话区号
- /// </summary>
- public string CityNum
- {
- get { return cityNum; }
- set { cityNum = value; }
- }
- /// <summary>
- /// 城市区县类集合
- /// </summary>
- public List<Combo> ComboboxList
- {
- get { return comboboxList; }
- set { comboboxList = value; }
- }
- }
- /// <summary>
- /// ComboBox需要绑定的类
- /// </summary>
- public class Combo
- {
- private string name;
- private string value;
- /// <summary>
- /// 区县名
- /// </summary>
- public string Name
- {
- get { return name; }
- set { name = value; }
- }
- /// <summary>
- /// 区县值
- /// </summary>
- public string Value
- {
- get { return this.value; }
- set { this.value = value; }
- }
- }
然后我们在初始化城市类的集合List<>代码如下:
- //实例化City类集合
- List<City> cityList = new List<City>()
- {
- new City()
- {
- CityName="成都",
- CityNum="028",
- ComboboxList=new List<Combo>()
- {
- new Combo(){ Name="武侯区", Value="28"},
- new Combo(){ Name="青羊区", Value="281"},
- new Combo(){ Name="成华区", Value="283"},
- new Combo(){ Name="高新区", Value="282"},
- new Combo(){ Name="金牛区", Value="284"}
- }
- },
- new City()
- {
- CityName="北京",
- CityNum="010",
- ComboboxList=new List<Combo>()
- {
- new Combo(){ Name="朝阳区", Value="10"},
- new Combo(){ Name="海淀区", Value="103"},
- new Combo(){ Name="崇文区", Value="104"},
- new Combo(){ Name="丰台区", Value="105"},
- new Combo(){ Name="东城区", Value="120"}
- }
- }
- };
最后 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}")。
- <sdk:DataGrid HorizontalAlignment="Left" AutoGenerateColumns="False" Margin="28,71,0,0" Name="ShowCityList" VerticalAlignment="Top" Height="271" Width="324" >
- <sdk:DataGrid.Columns>
- <sdk:DataGridTextColumn Header="城市" Binding="{Binding CityName}" IsReadOnly="True" Width="108"/>
- <sdk:DataGridTemplateColumn Header="区县">
- <sdk:DataGridTemplateColumn.CellTemplate>
- <DataTemplate>
- <ComboBox Width="80" Height="24" ItemsSource="{Binding ComboboxList}" SelectionChanged="ComboBox_SelectionChanged">
- <ComboBox.ItemTemplate>
- <DataTemplate>
- <TextBlock Width="80" Text="{Binding Name}" ></TextBlock>
- </DataTemplate>
- </ComboBox.ItemTemplate>
- </ComboBox>
- </DataTemplate>
- </sdk:DataGridTemplateColumn.CellTemplate>
- </sdk:DataGridTemplateColumn>
- <sdk:DataGridTemplateColumn Header="区县级别">
- <sdk:DataGridTemplateColumn.CellTemplate>
- <DataTemplate>
- <ListBox Width="80" ItemsSource="{Binding ComboboxList}" >
- <ListBox.ItemTemplate>
- <DataTemplate>
- <TextBlock Width="80" Text="{Binding Name}"></TextBlock>
- </DataTemplate>
- </ListBox.ItemTemplate>
- </ListBox>
- </DataTemplate>
- </sdk:DataGridTemplateColumn.CellTemplate>
- </sdk:DataGridTemplateColumn>
- </sdk:DataGrid.Columns>
- </sdk:DataGrid>
在ComboBox中,我添加了一个事件SelectionChanged="ComboBox_SelectionChanged"来捕捉当 ComboBox改变选项之后获取ComboBox的值。下面请看ComboBox_SelectionChanged的事件处理代码:
- private void ComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
- {
- ComboBox combobox = sender as ComboBox;
- //选择到的项转化为类Combo。
- Combo combo = combobox.SelectedValue as Combo;
- MessageBox.Show(combo.Name+"的区号是:"+combo.Value);
- }
注意:使用ComboBox.SelectedValue获取到的是实体类Combo。
本例采用VS2010+Silverlight4.0编写,点击 SLDataTemplate.rar 下载实例源码,下面大家看效果图:
转载于:https://blog.51cto.com/chengxingliang/821957
18.DataGrid内绑定ComboBox和ListBox以及取值相关推荐
- python迭代器-迭代器取值-for循环-生成器-yield-生成器表达式-常用内置方法-面向过程编程-05...
迭代器 迭代器 迭代: # 更新换代(其实也是重复)的过程,每一次的迭代都必须基于上一次的结果(上一次与这一次之间必须是有关系的) 迭代器: # 迭代取值的工具 为什么用迭代器: # 迭代器提供了一种 ...
- 稳扎稳打Silverlight(17) - 2.0数据之详解DataGrid, 绑定数据到ListBox
[索引页] [源码下载] 稳扎稳打Silverlight(17) - 2.0数据之详解DataGrid, 详解ListBox 作者:webabcd 介绍 Silverlight 2.0 详解DataG ...
- c#(winform)中ComboBox和ListBox添加项完全解决
c#(winform)中ComboBox和ListBox添加项完全解决 c#(winform)中ComboBox和ListBox添加项完全解决 刚开始用.net 的winform开发,发现好些控件都很 ...
- WPF DataGrid MVVM 绑定 SelectedCells
首先增加一个附加属性类 DataGridSelectedCellsBehavior public class DataGridSelectedCellsBehavior{public static I ...
- winform c#绑定combobox下拉框 年度代码。
winform c#绑定combobox下拉框 年度代码. comboBox1.Items.AddRange(new object[] { "2012", "2013&q ...
- datatable绑定comboBox显示数据[C#]
实现功能:datatable绑定comboBox,在下拉菜单中显示对应数据 实现方法: //dataSet 转 dataTable 1.生成datatable,并为combox绑定数据源:comboB ...
- 断开式绑定ComboBox 关键命令 1201
断开式绑定ComboBox 关键命令 1201 绑定数据 组合框对象.DataSource = 数据集.Tables[表名称]; 设置显示的内容源 组合框对象.DisplayMember = 数据表的 ...
- 用VBA向列表框(ComboBox或ListBox)中填加数据
用VBA向列表框(ComboBox或ListBox)中填加数据 向列表框中填加数据的方法很多,下面根据实例介绍3种最常用到的方法: 图1 图2 如图1所示的下拉列表框(组合框),图2为其数据源,图2所 ...
- 图片浏览器开发日志-14(ComboBox和ListBox toolips实现)
按:本来是想实现ComboBox的自绘,从而实现界面按钮的统一,网上ComboBox自绘的代码很多,因此很快达到了目的,后来发现有的字段内容超长,就想实现ComboBox 的tooltips功能.上网 ...
最新文章
- CMAKE设置INSTALL工程,分别设置头文件、Lib和DLL的输出路径
- 麒麟处理器是基于arm的吗_麒麟芯片是基于ARM构架,如果得不到授权华为还能活吗?...
- Android SDK下载失败-Android SDK Manager国内无法更新的解决方案
- Keil MDK-ARM下载 安装与和谐教程
- GDCM:读取流图像的测试程序
- Java开发代码规范之编程规约---命名风格
- 黑马程序员_java基础笔记(15)...银行业务调度系统_编码思路及代码
- 一名3年工作经验的程序员应该具备的技能
- 什么叫侧面指纹识别_屏幕指纹技术最强的3款全面屏手机,指纹识别技术手机你喜欢吗?...
- python-excel写入代码
- pyqt 子窗口控制主窗口绘图_PyQtGraph如何关闭绘图窗口/关闭所有绘图窗口?
- 自学mysql还是sql好_如何自学SQL?
- 支付宝查询对账单对账+解压并将数据读取解析入库
- 【报错记录】MybatisPlus报Mapped Statements collection does not contain value for...
- 调整VirtualBox虚拟磁盘VDI文件空间大小
- 沉痛哀悼我的弟弟-恽小华-南理工教授,候选中科院院士——一声叹息
- FMM 大战 LMM - SOFR 企稳 Part I
- 三、T100应付管理之采购应付-入库应付管理篇
- web自动登录方法汇总(转自老大指导)
- 红外图像处理-基于场景的非均匀矫正