Linq to SQL 绑定 ComboBox
最近学习Linq to SQL,发现Linq是一个开发轻量数据库的好东西,大大简化了数据连接、查询过程。但是在绑定ComBoBox的时间发现了一个问题:Linq查询后得到的数据tolist后,只能实现DataSource绑定,无法赋值DisplayMember和ValueMember,即使赋值后,SelectedValue也得不到想要的数值。例如:
Dim tempProvince = From cust In db.AddressProvince
Select New With {.id = cust.ProvinceID, .name = cust.ProvinceName} cmbProvince.DataSource = tempProvince.tolist
cmbProvince.DisplayMember = "name"
cmbProvince.ValueMember = "id"
在网上搜索了几天,有说解决的办法是将List转换为DataTable,然后绑定,转换代码:
''' <summary>
''' List转换为DataTable
''' </summary>
''' <param name="list">List</param>
''' <returns>DataTable</returns>
''' <remarks></remarks>
Public Function ConvertToDataTable(ByVal list As IList) As DataTable
Dim table As New DataTable()
Dim fields() As PropertyInfo
If list.Count > Then
fields = list().GetType.GetProperties
For Each field In fields
table.Columns.Add(field.Name, field.PropertyType)
Next
For Each item In list
Dim row As DataRow = table.NewRow()
For Each field In fields
row(field.Name) = field.GetValue(item)
Next
table.Rows.Add(row)
Next
End If
Return table
End Function
绑定代码:
Dim tempProvince = From cust In db.AddressProvince
Select New With {.id = cust.ProvinceID, .name = cust.ProvinceName}
Dim tempdatatable As New DataTable
tempdatatable = ConvertToDataTable(tempProvince.ToList)
cmbProvince.DataSource = tempdatatable '绑定DataTable数据时引发SelectedIndexChanged事件
cmbProvince.DisplayMember = "name"
cmbProvince.ValueMember = "id"
通过上述转换后,可以正确的绑定到ComBoBox了,但有出现了一个新问题,在绑定数据后引发了SelectedIndexChanged事件,ComBoBox的SelectedValue值还是错误的,代码:
Private Sub cmbProvince_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cmbProvince.SelectedIndexChanged
Dim tempCity = From cust In db.AddressCity
Where cust.ProvinceID = cmbProvince.SelectedValue.ToString
Select New With {.id = cust.CityID, .name = cust.CityName}
End Sub
郁闷了半天,灵机一动,更改后的绑定代码:
Dim tempProvince = From cust In db.AddressProvince
Select New With {.id = cust.ProvinceID, .name = cust.ProvinceName}
Dim tempdatatable As New DataTable
tempdatatable = ConvertToDataTable(tempProvince.ToList)
cmbProvince.DisplayMember = "name"
cmbProvince.ValueMember = "id"cmbProvince.DataSource = tempdatatable '重点:DataSource放到了DisplayMember和ValueMember赋值后。
哈哈,问题解决了!......
你以为这就结束了?
NO!
这不是重点,高潮来了:
心血来潮,把转换过程去掉了,直接绑定Linq查询结果:
Dim tempProvince = From cust In db.AddressProvince
Select cust.ProvinceID, cust.ProvinceName cmbProvince.DisplayMember = "ProvinceName"
cmbProvince.ValueMember = "ProvinceID"
cmbProvince.DataSource = tempProvince
居然也正常运行了!!!
最后总结:
ComBoBox可以绑定Linq查询的结果,唯一的要求就将DataSource放在DisplayMember和ValueMember的后面。
Linq to SQL 绑定 ComboBox的更多相关文章
- 年终巨献 史上最全 ——LINQ to SQL语句
LINQ to SQL语句(1)之Where 适用场景:实现过滤,查询等功能. 说明:与SQL命令中的Where作用相似,都是起到范围限定也就是过滤作用的,而判断条件就是它后面所接的子句.Where操 ...
- LINQ to SQL语句(9)之Top/Bottom和Paging和SqlMethods
适用场景:适量的取出自己想要的数据,不是全部取出,这样性能有所加强. Take 说明:获取集合的前n个元素:延迟.即只返回限定数量的结果集. var q = ( from e in db.Employ ...
- LINQ TO SQL 大全
最近悟出来一个道理,在这儿分享给大家:学历代表你的过去,能力代表你的现在,学习代表你的将来. 十年河东十年河西,莫欺少年穷 学无止境,精益求精 LINQ to SQL语句(1)之Where 适用场景: ...
- LINQ to SQL大全
LINQ to SQL语句 (1)之Where Where操作 适用场景:实现过滤,查询等功能. 说明:与SQL命令中的Where作用相似,都是起到范围限定也就是过滤作用的,而判断条件就是它后面所接的 ...
- [转]LINQ To SQL 语法及实例大全
转载自:http://blog.csdn.net/pan_junbiao/article/details/7015633 LINQ to SQL语句(1)之Where Where操作 适用场景:实现过 ...
- LINQ to SQL语句非常详细(原文来自于网络)
LINQ to SQL语句(1)之Where Where操作 适用场景:实现过滤,查询等功能. 说明:与SQL命令中的Where作用相似,都是起到范围限定也就是过滤作用的,而判断条件就是它后面所接的子 ...
- LINQ To SQL 语法及实例大全
http://blog.csdn.net/pan_junbiao/article/details/7015633 http://blog.csdn.net/pan_junbiao/article/de ...
- 转载linq to sql 的详解
[转]LINQ To SQL 语法及实例大全 2011-11-26阅读38651 评论9 LINQ to SQL语句(1)之Where Where操作 适用场景:实现过滤,查询等功能. 说明:与SQL ...
- 20150221—LINQ to SQL 查询数据
LINQ to SQL 可以快捷的查询基于SQL的数据,直接在VS中包括基本的Object/relation映射器,O/R映射器可以快速的将基于SQL的数据源映射为CLR对象,之后就可以使用LINQ查 ...
随机推荐
- Android基础_2 Activity线性布局和表格布局
在activity的布局中,线性布局和表格布局是最简单的,这次分别从线性布局,表格布局以及线性布局和表格混合布局做了实验,实验中只需要编写 相应的xml的代码,java代码不需要更改,因为我们这里只是 ...
- Java [Leetcode 67]Add Binary
题目描述: Given two binary strings, return their sum (also a binary string). For example,a = "11&qu ...
- 【C#学习笔记】获得系统时间
using System; namespace ConsoleApplication { class Program { static void Main(string[] args) { Conso ...
- 批量添加-fno-objc-arc
http://syxiaqj.github.io/2014/02/28/bee-learning-1/ 4.批量添加-fno-objc-arc 因为BeeFramework是一个非RAC的框架,现在X ...
- Oracle AWR报告自动生成并ftp脚本
脚本主要由以下几个部分组成: awr.sql 用来在sqlplus 中执行的脚本,该脚本从网上直接找的. awr.sh 用来调用sqlplus来生成awr报告. ftp.sh 用来打包压缩每天生成的a ...
- 【jQuery】总结:筛选器、控制隐藏、操作元素style属性
筛选器 -> http://blog.csdn.net/lijinwei112/article/details/6938134 常用到的: $("tr[id=ac_"+id+ ...
- redhat--nagios插件--check_traffic.sh
****在被监控主机安装nrpe**** (1)在被监控主机上,增加用户和密码 useradd nagios passwd nagios (2)安装nagios插件 tar zxf nagios-pl ...
- 底部菜单栏(一) TabHost实现
需求:使用TabHost实现底部菜单栏: 效果图: 实现分析: 1.目录结构: 代码实现: 1.activity_main.xml <?xml version="1.0" e ...
- tcprstat的使用方式
两种使用方式:1)本机直接在线采集:2)分析tcpdump采集到的离线pcap文件 1. 本机直接在线采集 参数: -p :指定只采集此TCP port的请求 -t : 采集输出的时间间 ...
- .NET之美——C# 中的委托和事件
C# 中的委托和事件 文中代码在VS2005下通过,由于VS2003(.Net Framework 1.1)不支持隐式的委托变量,所以如果在一个接受委托类型的位置直接赋予方法名,在VS2003下会报错 ...