DataSource绑定DataTable.Select()显示system.data.DataRow问题解决的方法

有时候我们须要在控件中绑定DataTable中设定条件过滤后的数据,此时,在winForm环境中,一些控件不能正确绑定并显示数据内容。这是由于DataTable.Select()返回的是DataRow[]类型的行数组。没有行列相关架构值。而控件如ListBox、comboBox等不能识别行数组中的列。读不到行列架构值,所以无法正常显示。

解决的方法是用DataView进行转换,即在DataView中对DataTable过滤数据。

DataView构造函数例如以下:

DataView ( DataTable dt,  String RowFilter,  String SorColName,  DataViewRowState)

dt 用于获取或设置源

RowFilter 获取或设置用于筛选在 DataView 中查看哪些行的表达式

SorColName 获取或设置 DataView 的一个或多个排序列以及排序顺序

DataViewRowState 具体取值及功能见下表:

  Added 一个新行。
  CurrentRows 包含未更改行、新行和已改动行的当前行。
默认情况下。DataViewRowState 项设置当前行。
  Deleted 已删除的行。

  ModifiedCurrent 已改动的原始数据的当前版本号(请參见 ModifiedOriginal)。

  ModifiedOriginal 已改动的数据的原始版本号。(虽然此数据已被改动,它仍作为 ModifiedCurrent 可用)。
  None 无。
  OriginalRows 包含未更改行和已删除行的原始行。

  Unchanged 未更改的行。

Count 在应用RowFilter后,获取DataView中的行数

应用例子:

DataTable jgbjlx = getDataTable( "jgbjlx");

jgbjlxcomboBox.DisplayMember = "jgname";

jgbjlxcomboBox.ValueMember = "id";

jgbjlxcomboBox.DataSource = new DataView(jgbjlx , "id>0","id",DataViewRowState.CurrentRows);

使用DataView还能够依据行的状态设置DataViewRowState,实现显示更改和已经删除的行、改动前的原始行、未更改的行等子集。

时间: 2024-10-15 22:25:28

DataSource绑定DataTable.Select()显示system.data.DataRow问题解决的方法的相关文章

DataSource绑定DataTable.Select()显示system.data.DataRow问题解决办法

有时候我们需要在控件中绑定DataTable中设定条件过滤后的数据,此时,在winForm环境中,一些控件不能正确绑定并显示数据内容,这是因为DataTable.Select()返回的是DataRow[]类型的行数组,没有行列相关架构值.而控件如ListBox.comboBox等不能识别行数组中的列,读不到行列架构值,所以无法正常显示. 解决办法是用DataView进行转换,即在DataView中对DataTable过滤数据.DataView构造函数如下: DataView ( DataTabl

编译器错误消息: CS0122: “System.Data.DataRow.DataRow(System.Data.DataRowBuilder)”不可访问,因为它受保护级别限制

编译错误 说明: 在编译向该请求提供服务所需资源的过程中出现错误.请检查下列特定错误详细信息并适当地修改源代码. 编译器错误消息: CS0122: "System.Data.DataRow.DataRow(System.Data.DataRowBuilder)"不可访问,因为它受保护级别限制 源错误:   行 17: 行 18: DataTable dt = new DataTable(); 行 19: System.Data.DataRow r = new DataRow(); 行

How to use dt.Rows.Cast<System.Data.DataRow>().Take(n)

参考文章:http://stackoverflow.com/questions/2787458/how-to-select-top-n-rows-from-a-datatable-dataview-in-asp-net DataTable dtPage = dt.Rows.Cast<System.Data.DataRow>().Skip(pageSize * (page - 1)).Take(pageSize).CopyToDataTable();

System.Data.DataRow.DataRow(System.Data.DataRowBuilder 因为它受保护级别限制 如何解决,解决办法

错误 1 "System.Data.DataRow.DataRow(System.Data.DataRowBuilder)"不可访问,因为它受保护级别限制 原因:DataRow dr= new DataRow();    // 错误,DataRow 不能直接new 解决办法: DataRow dr :或者,使用DataTable dt = new DataTable(); //对应的行,使用dt[],例如第一行  dt[0]

错误 1 “System.Data.DataRow.DataRow(System.Data.DataRowBuilder)”不可访问,因为它受保护级别限制

new DataRow 的方式: DataTable pDataTable = new DataTable(); DataRow pRow = new DataRow(); 正确的方式: DataRow pRow=pDataTable.newRow();

(转)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赋了正确的值也会出现这个问题,这里有一个赋值时机选择的问题,请看

DataTable.Select

转载请注明出处:http://www.cnblogs.com/havedream/p/4453297.html 方法:DataTable.Select 作用:获取 DataRow 对象的数组. 重载: Select()------------------------------------------------获取所有 DataRow 对象的数组. Select(String)-------------------------------------------获取按与筛选条件相匹配的所有 D

[转]dataTable select() 方法

DataTable是我们在进行开发时经常用到的一个类,并且经常需要对DataTable中的数据进行筛选等操作,下面就介绍一下Datatable中经常用到的一个方法——Select,微软提供了四个函数的重载,分别是 Select() Select(string filterExpression) Select(string filterExpression, string sort) Select(string filterExpression,string sort, DataViewRowSt