DataView详解.docx

上传人:b****5 文档编号:8043492 上传时间:2023-01-28 格式:DOCX 页数:14 大小:22.89KB
下载 相关 举报
DataView详解.docx_第1页
第1页 / 共14页
DataView详解.docx_第2页
第2页 / 共14页
DataView详解.docx_第3页
第3页 / 共14页
DataView详解.docx_第4页
第4页 / 共14页
DataView详解.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

DataView详解.docx

《DataView详解.docx》由会员分享,可在线阅读,更多相关《DataView详解.docx(14页珍藏版)》请在冰豆网上搜索。

DataView详解.docx

DataView详解

DataView数据视图类

表示用于排序、筛选、搜索、编辑和导航的DataTable的可绑定数据的自定义视图。

DataView的功能类似于数据库的视图,他是数据源DataTable的封装对象,可以对数据源进行排序、搜索、过滤等处理功能,一旦DataView绑定了数据源DataTable的话,如果此时,DataTable中的数据内容发生变化后,那么DataView也随之发生变化。

注意:

如果不显式指定DataView的排序条件,将按DataView的相应DataRow在DataTable.RowsDataRowCollection中的索引来对DataView中的DataRowView对象进行排序。

应用实例01:

///

///dataView.RowStateFilter

///根据RowStateFilter的行的状态作为过滤条件,进行筛选过滤

///

privatevoidDataViewTest02()

{

//如果将RowStateFilter设置为ModifiedCurrent或CurrentRows,新行也将是可见的。

//如果将RowStateFilter设置为ModifiedOriginal和OriginalRows,已删除的行也将是可见的。

DataTabledataTable=newDataTable("dataTable");

DataColumndataColumn=newDataColumn("dataColumn");

dataTable.Columns.Add(dataColumn);

DataRowdataRow;

for(inti=0;i<10;i++)

{

dataRow=dataTable.NewRow();

dataRow["dataColumn"]="item"+i;

dataTable.Rows.Add(dataRow);

}

dataTable.AcceptChanges();

 

//CreateaDataViewwiththetable.

DataViewdataView=newDataView(dataTable);

//Changeonerow'svalue:

dataTable.Rows[1]["dataColumn"]="Hello";

//Addonerow:

dataRow=dataTable.NewRow();

dataRow["dataColumn"]="World";

dataTable.Rows.Add(dataRow);

//设置dataview显示的过滤条件,下面的条件是只显示添加或者修改的内容

dataView.RowStateFilter=DataViewRowState.Added|DataViewRowState.ModifiedCurrent;

dataTable.Rows[1].Delete();

dataTable.Rows[2].Delete();

dataTable.Rows[3].Delete();

//设置dataview显示的过滤条件,下面的条件是只显示被删除的内容

dataView.RowStateFilter=DataViewRowState.Deleted;

this.gvFirstView.DataSource=dataView;

this.gvFirstView.DataBind();

//设置dataview显示的过滤条件,下面的条件是只显更改行与新行、已修改行、当前行

dataView.RowStateFilter=DataViewRowState.CurrentRows;

this.gvFirstView.DataSource=dataView;

this.gvFirstView.DataBind();

//设置dataview显示的过滤条件,未更改的行

dataView.RowStateFilter=DataViewRowState.Unchanged;

this.gvFirstView.DataSource=dataView;

this.gvFirstView.DataBind();

//设置dataview显示的过滤条件,未更改行,已删除行

dataView.RowStateFilter=DataViewRowState.OriginalRows;

this.gvFirstView.DataSource=dataView;

this.gvFirstView.DataBind();

}

应用实例02:

///

///dataView.RowFilter按查询条件,将DataView中的内容检索出来

///dataView.find("排序列对应列中的任意值")返回结果是检索出的行索引号

///DataRowView[]foundRows=view.FindRows(newobject[]{"1","山东"});按排序定义的列顺序,查找符合条件的行集合

///需要与排序列定义的数目与顺序一致。

///

privatevoidDataViewRowFilter()

{

DataTabledt=newDataTable();

dt.Columns.Add("cityName");

dt.Columns.Add("ID");

//dt.PrimaryKey=newDataColumn[]{dt.Columns["ID"]};

 

DataRowdrCity01=dt.NewRow();

drCity01["ID"]="1";

drCity01["cityName"]="山东";

dt.Rows.Add(drCity01);

DataRowdrCity02=dt.NewRow();

drCity02["ID"]="2";

drCity02["cityName"]="天津";

dt.Rows.Add(drCity02);

DataRowdrCity03=dt.NewRow();

drCity03["ID"]="1";

drCity03["cityName"]="山东";

dt.Rows.Add(drCity03);

dt.AcceptChanges();

DataViewview=dt.DefaultView;

//默认这些属性都为true

view.AllowDelete=true;

view.AllowEdit=true;

view.AllowNew=true;

DataRowViewdvRow=view.AddNew();

dvRow["ID"]="4";

dvRow["cityName"]="山东";

 

dvRow.BeginEdit();

dvRow["cityName"]="山东1";

dvRow.EndEdit();

dvRow.Delete();

//按行的具体条件进行过滤查询表达式的设置详情参见DataColumn.Expression属性

//view.RowFilter="cityName='山东'";

//按搜索条件,将DataView中符合条件的行,检索出来,与数据库用sql查询作用一致。

view.RowFilter="cityNamelike'*山东*'";

//在按行的条件的基础上,按状态继续过滤

view.RowStateFilter=DataViewRowState.CurrentRows;

view.Sort="IDDESC,cityNameASC";

//Find方法查找出视图中行的索引

//intindex=view.Find("3");

//stringcityName=view[index]["cityName"].ToString();

//检索条件必须按排序中定义的顺序进行

DataRowView[]foundRows=view.FindRows(newobject[]{"1","山东"});

stringcontent=string.Empty;

foreach(DataRowViewdvinfoundRows)

{

content+=dv["cityName"].ToString()+"
";

}

Response.Write(content);

this.gvFirstView.DataSource=view;

this.gvFirstView.DataBind();

}

DataColumn..:

:

.Expression属性

表达式语法

在创建表达式时,使用ColumnName属性来引用列。

例如,如果一个列的ColumnName是“UnitPrice”,而另一个是“Quantity”,则表达式将是:

"UnitPrice*Quantity"

注意:

如果在表达式中使用了某个列,则该表达式就存在一个对该列的依赖项。

重命名或移除依赖列时不会引发异常。

当访问缺少了依赖项的表达式列时,将引发异常。

在为筛选器创建表达式时,用单引号将字符串括起来:

"LastName='Jones'"

下面的字符是特殊字符,如下面所解释的,如果它们用于列名称中,就必须进行转义:

\n(newline)

\t(tab)

\r(carriagereturn)

~

#

\

/

=

>

<

+

-

*

%

&

|

^

'

"

[

]

如果列名称包含上面的字符之一,该名称必须用中括号括起来。

例如,若要在表达式中使用名为“Column#”的列,应写成“[Column#]”:

Total*[Column#]

由于中括号是特殊字符,如果它是列名称的组成部分,必须使用斜杠("\")将中括号转义。

例如,名为“Column[]”的列应写成:

Total*[Column[\]]

(只有第二个中括号必须转义。

用户定义的值

用户定义的值可以用在将与列值进行比较的表达式内。

字符串的值应括在单引号内。

日期值应用井号(#)或单引号(')括起来,具体取决于数据提供程序。

对于数值,允许使用小数和科学记数法。

例如:

"FirstName='John'"

"Price<=50.00"

"Birthdate<#1/31/82#"

对于包含枚举值的列,将值强制转换为整数数据类型。

例如:

"EnumColumn=5"

运算符

使用布尔值AND、OR和NOT运算符时允许串联。

可以使用括号来组合子句和强制优先级。

AND运算符优先于其他运算符。

例如:

(LastName='Smith'ORLastName='Jones')ANDFirstName='John'

在创建比较表达式时,允许使用下列运算符:

<

>

<=

>=

<>

=

IN

LIKE

在表达式中还支持下列算术运算符:

+(加)

-(减)

*(乘)

/(除)

%(模数)

字符串运算符

若要连接字符串,请使用+字符。

DataSet类的CaseSensitive属性的值确定字符串比较是否区分大小写。

但是,可以用DataTable类的CaseSensitive属性重写该值。

通配符

在LIKE比较中,*和%两者可以互换地作为通配符。

如果LIKE子句中的字符串包含*或%,那么这些字符应用中括号([])对其进行转义。

如果子句中有中括号,那么中括号字符应用中括号对其进行转义(例如[[]或[]])。

在模式的开头和结尾,或者在模式的结尾,或在模式的开头,都允许使用通配符。

例如:

"ItemNameLIKE'*product*'"

"ItemNameLIKE'*product'"

"ItemNameLIKE'product*'"

在字符串的中间不允许使用通配符。

例如,不允许'te*xt'。

父/子关系引用

通过在列名称前面加Parent,就可以在表达式中引用父表。

例如,Parent.Price引用父表的名为Price的列。

通过在列名称前面加一个Child,就可以在表达式中引用子表中的列。

但是,因为子关系可以返回多行,所以必须在聚合函数中包括对子列的引用。

例如,Sum(Child.Price)将返回子表中名为Price的列的总和。

如果某个表有多个子表,则语法是:

Child(RelationName)。

例如,如果某个表有两个子表,它们的名称分别为Customers和Orders,并且DataRelation对象被命名为Customers2Orders,则引用将为:

Avg(Child(Customers2Orders).Quantity)

聚合

支持下列聚合类型:

Sum(求和)

Avg(平均)

Min(最小值)

Max(最大值)

Count(计数)

StDev(统计标准偏差)

Var(统计方差)。

聚合通常沿着关系执行。

通过使用上面列出的函数之一和上面“父/子关系引用”中详述的子表列,来创建聚合表达式。

例如:

Avg(Child.Price)

Avg(Child(Orders2Details).Price)

聚合也可以在单个表上执行。

例如,若要为名为“Price”的列中的数字创建汇总,就用:

Sum(Price)

注意:

如果使用一个表来创建聚合,将没有组合功能。

相反,所有行都在列中显示相同的值。

如果表没有行,聚合函数将返回nullNothingnullptrnull引用(在VisualBasic中为Nothing)。

数据类型总是可以通过检查列的DataType属性来确定。

还可以使用Convert函数来转换数据类型,如下面这一部分所示。

FUNCTIONS

还支持下列函数:

CONVERT

说明

将特定表达式转换为指定的.NETFramework类型。

语法

Convert(expression,type)

参数

expression—要转换的表达式。

type—值将转换成的.NETFramework类型。

例如:

myDataColumn.Expression="Convert(total,'System.Int32')"

所有转换都是有效的,只有下列情况例外:

Boolean只能与Byte、SByte、Int16、Int32、Int64、UInt16、UInt32、UInt64、String和它本身相互转换。

Char只能与Int32、UInt32、String和它本身相互转换。

DateTime只能与String和它本身相互转换。

TimeSpan只能与String和它本身相互转换。

LEN

说明

获取字符串的长度

语法

LEN(expression)

参数

expression—要计算的字符串。

例如:

myDataColumn.Expression="Len(ItemName)"

ISNULL

说明

检查表达式并返回已检查的表达式或返回替换值。

语法

ISNULL(expression,replacementvalue)

参数

expression—要检查的表达式。

replacementvalue—如果表达式为nullNothingnullptrnull引用(在VisualBasic中为Nothing),则返回replacementvalue。

例如:

myDataColumn.Expression="IsNull(price,-1)"

IIF

说明

根据逻辑表达式的结果,获取两个值之一。

语法

IIF(expr,truepart,falsepart)

参数

expr—要计算的表达式。

truepart—表达式为真时返回的值。

falsepart—表达式为假时返回的值。

例如:

myDataColumn.Expression="IIF(total>1000,'expensive','dear')

TRIM

说明

移除所有前导的和后缀的空格字符,如\r、\n、\t、''

语法

TRIM(expression)

参数

expression—要剪裁的表达式。

SUBSTRING

说明

获取从字符串中的指定点开始,具有指定长度的子字符串。

语法

SUBSTRING(expression,start,length)

参数

expression—子字符串的源字符串。

start—指定子字符串开始位置的整数。

length—指定子字符串长度的整数。

例如:

myDataColumn.Expression="SUBSTRING(phone,7,8)"

注意:

可以向Expression属性分配一个空值或空字符串,来重置该属性。

如果为表达式列设置了一个默认值,则在重置Expression属性之后,这个默认值就赋给所有以前填充过的行。

示例

下面的示例在DataTable中创建三个列。

第二和第三列包含表达式;第二列使用可变税率计算税款,第三列将计算的结果添加到第一列的值。

结果表显示在DataGrid控件中。

VisualBasic 

复制代码

PrivateSubCalcColumns()

DimrateAsSingle=.0862

dimtableasDataTable=NewDataTable

'Createthefirstcolumn.

DimpriceColumnAsDataColumn=NewDataColumn

WithpriceColumn

.DataType=System.Type.GetType("System.Decimal")

.ColumnName="price"

.DefaultValue=50

EndWith

'Createthesecond,calculated,column.

DimtaxColumnAsDataColumn=NewDataColumn

WithtaxColumn

.DataType=System.Type.GetType("System.Decimal")

.ColumnName="tax"

.Expression="price*0.0862"

EndWith

'Createthirdcolumn

DimtotalColumnAsDataColumn=NewDataColumn

WithtotalColumn

.DataType=System.Type.GetType("System.Decimal")

.ColumnName="total"

.Expression="price+tax"

EndWith

'AddcolumnstoDataTable

Withtable.Columns

.Add(priceColumn)

.Add(taxColumn)

.Add(totalColumn)

EndWith

DimrowAsDataRow=table.NewRow

table.Rows.Add(row)

DimviewAsNewDataView

view.Table=table

DataGrid1.DataSource=view

EndSub

C# 

复制代码

privatevoidCalcColumns()

{

DataTabletable=newDataTable();

//Createthefirstcolumn.

DataColumnpriceColumn=newDataColumn();

priceColumn.DataType=System.Type.GetType("System.Decimal");

priceColumn.ColumnName="price";

priceColumn.DefaultValue=50;

//Createthesecond,calculated,column.

DataColumntaxColumn=newDataColumn();

taxColumn.DataType=System.Type.GetType("System.Decimal");

taxColumn.ColumnName="tax";

taxColumn.Expression="price*0.0862";

//Createthirdcolumn.

DataColumntotalColumn=newDataColumn();

totalColumn.DataType=System.Type.GetType("System.Decimal");

totalColumn.ColumnName="total";

totalColumn.Expression="price+tax";

//AddcolumnstoDataTable.

table.Columns.Add(priceColumn);

table.Columns.Add(taxColumn);

table.Columns.Add(totalColumn);

DataRowrow=table.NewRow();

table.Rows.Add(row);

DataViewview=newDataView(table);

dataGrid1.DataSource=view;

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工作范文 > 行政公文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1