comboBox的id返回System.Data.DataRowView

关系到ComboBox的DataSource,DisplayMember和ValueMember属性的设置顺序的问题。

ComboBox的DataSource属性为object类型,但是需要实现IListSource接口的类型。

当把DataTable赋值给该属性后,如果此时没有指定ComboBox的DisplayMember和ValueMember属性的话,

这时获得的ComboBox的SelectValue属性将是System.Data.DataRowView的一个实例。

据此推测DataTable中实现的IListSource接口中的GetList()方法应该返回的是DataTable的

DefaultView,也就是DataView的一个实例是DataRowView的集合。而因为没有指定DisplayMember和ValueMember

属性,所以ComboBox直接把DataView中的每一个DataRowView实例填充到列表中。

这样的话就可能在ComboBox的SelectedIndexChanged事件处理中产生错误。

为了避免这个问题应该先设置DisplayMember和ValueMember属性,然后再设置DataSource属性。

避免先设置DataSource属性。

combobox.ValueMember = "id";
combobox.DataSource = dt;
combobox.DisplayMember = "name";

比如在combobox_SelectedIndexChanged事件需要获取id,就要将id放在DataSource上面,否则获取不到

参考:

http://www.cnblogs.com/liuhonghai/archive/2010/03/31/1701211.html

http://blog.csdn.net/lubiaopan/article/details/5915774

时间: 2024-10-12 22:23:16

comboBox的id返回System.Data.DataRowView的相关文章

(转)Combobox出现System.Data.DataRowView的原因,以及指定ValueMember的时机问题

原文地址 http://blog.csdn.net/lubiaopan/article/details/5915774 当使用Combobox控件时,出现SelectedValue的值为“System.Data.DataRowView”的原因有两个:在Combobox的DataSource不为空的情况下,要么是没有为ValueMember赋值,要么是赋值赋错了,这两种情况下系统就会把SelectedValue的默认值输出来(注意红色部分,如果DataSource为空,那么SelectedValu

Combobox出现System.Data.DataRowView的原因,以及指定ValueMember的时机问题

当使用Combobox控件时,出现SelectedValue的值为“System.Data.DataRowView”的原因有两个:在Combobox的DataSource不为空的情况下,要么是没有为ValueMember赋值,要么是赋值赋错了,这两种情况下系统就会把SelectedValue的默认值输出来(注意红色部分,如果DataSource为空,那么SelectedValue的值为null).但有时即使你对ValueMember赋了正确的值也会出现这个问题,这里有一个赋值时机选择的问题,请看

System.Data.SqlClient.SqlParameter.cs

ylbtech-System.Data.SqlClient.SqlParameter.cs 1.返回顶部 1. #region 程序集 System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 // C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\System.Data.dll

在mvc返回JSON时出错:序列化类型为“System.Data.Entity.DynamicProxies.Photos....这个会的对象时检测到循环引用 的解决办法

在MVC中返回JSON时出错,序列化类型为“System.Data.Entity.DynamicProxies.Photos....这个会的对象时检测到循环引用. public ActionResult GetSdirsbyFdirid(int id) { // db.Configuration.LazyLoadingEnabled = false; db.Configuration.ProxyCreationEnabled = false; List<Seconddirectory> lis

C++: read SQL server data using System::Data::SqlClient

stdafx.h: // stdafx.h : include file for standard system include files, // or project specific include files that are used frequently, but // are changed infrequently #pragma once #using <mscorlib.dll> #using <System.dll> #using <System.Dat

System.Data.SQLite数据库简介

SQLite介绍 在介绍System.Data.SQLite之前需要介绍一下SQLite,SQLite是一个类似于Access的单机版数据库管理系统,它将所有数据库的定义(包括定义.表.索引和数据本身)都保存在一个单一的文件中.并且,SQLite是一个用C实现的类库,它在内存消耗.文件体积.简单性方面都有不错的表现,如果数据在10W条以下,查询速度也是相当快的.SQLite具有以下特征:实现多数SQL92的标准,包括事务(原子性.一致性.隔离性和持久性).触发器和大多数的复杂查询.不对插入或者更

vs2015连接oracle 11g(.net自带方式 using System.Data.OracleClient;)

1,添加引用 System.Data.OracleClient 2,连接语句 string connectionString; string queryString; connectionString = "Data Source=127.0.0.1/orcl;User ID=scott;PassWord=TIGER"; queryString = "SELECT * FROM TEST"; OracleConnection myConnection = new O

C#使用System.Data.SQLite操作SQLite

使用System.Data.SQLite 下载地址:http://system.data.sqlite.org/index.html/doc/trunk/www/downloads.wiki 得到System.Data.SQLite.dll添加到工程引用: 建表,插入操作 static void Main(string[] args) { SQLiteConnection conn = null; string dbPath = "Data Source =" + Environmen

EntityFramework 找不到方法:“Void System.Data.Entity.DbModelBuilder.RegisterEntityType

问题原因,EF当前版本没有该方法,将EF版本升级即可. 1.packages.config <package id="EntityFramework" version="6.1.3" targetFramework="net40" /> 2.app.config <configSections> <!-- For more information on Entity Framework configuration,