新手小白

在开发设计一款手机软件,采用了 MyS中的 DataView 查看。查看后分辨视图是不是有返回值,找了好长时间,总算找到他的 DataView XX.Count 主要参数。

 string table = String.Format("`Database` WHERE `XX` = '{0}';", XX);                    
                    DataView dv = mysqlUtile.MysqlDataAdapter(table);

                    if (dv.Count==0)
	                    {
                           ...                 
	                    }
                }

  

 

 

全文网站地址:http://skybirdzw.blog.163.com/blog/static/725706262011233455240/

DataView类用于表明定制的DataTable的视图。DataTableDataView的关联是遵照知名的策略模式--文本文档/视图方式,在其中DataTable是文本文档,而Dataview是视图。
在任何时刻,你都能够有好几个根据同样数据信息的不一样的视图。更关键的是,你可以对每一个具备自身一套属性、方式、恶性事件的视图做为单独的对象开展解决。这也意味着了相对性ADO一个极大的飞越。
建立DataView

public DataView();
public DataView(DataTable);

DataView仅有同早已存有的、很可能是是非非空的DataTable对象联接后才能用。一般,这一联接在结构时就特定了。

DataView dv;
dv = new DataView(theDataSet.Tables["Employees"]);

 可是,你也能够先建立一个新的视图,随后再用Table属性同表关联。

DataView dv = new DataView();
dv.Table = theDataSet.Tables["Employees"];
DataView构造方法使你由DataTable中获得一个DataView对象。假如必须,相反也可以。实际上,DataTable对象的DefaultView属性回到一个该表的DataView对象。
DataView dv = dt.DefaultView;


一旦你拥有DataView对象,你可以运用它的属性来创建你期待客户看到的数据信息行集。一般,你可以应用下述属性:

  • RowFilter
  • Sort

前面一种能够定制视图中由此可见数据信息应搭配的标准。而后面一种根据表达式来开展排列。自然你可以应用这二者的随意组成。

设定过虑 RowFilter是一个可读写能力的属性,用于载入和设定表过虑的表达式。

public virtual string RowFilter {get; set;}

 你可以用字段名,逻辑性和数据运算符和变量定义的随意合理合法组成构成表达式。下列是一些事例:

dv.RowFilter = "Country = 'USA'";
dv.RowFilter = "EmployeeID >5 AND Birthdate < #1/31/82#"
dv.RowFilter = "Description LIKE '*product*'"


使我们看来一下过滤装置的基础标准和运算符。
过虑字符串数组是表达式的逻辑性联接。可以用AND,OR,NOT来组合成一个较短的表达式,还可以应用圆括号来构成子句,特定优先选择的计算。
一般包括字段名的子句同英文字母、数据、时间或另一个字段名开展较为。这儿,能够应用关系运算符和算术运算符,如>=, <, >, , *, % (牙模型)这些。
假如要选择的行并不可以便捷地根据算数或逻辑运算符表述,你可以应用IN操作符。下列编码显示信息怎样选择一个任意行:

dv.RowFilter = "employeeID IN (2,4,5)"


你也能够使用通配符*和%,他们同LIKE运算符一起应用时看起来更有效。他们都表明随意总数的标识符,能够互相取代应用。
一定要注意,假如在LIKE子句中早已拥有*或%标识符,你务必用方括号将其括起,以防模棱两可。假如很悲剧,字符串数组中方括号自身也存有了,那麼它也务必用将自身括起。那样,搭配句子会以下所显示:

dv.RowFilter = "Description LIKE '[[]*[]]product[[]*[]]"


使用通配符只容许在过虑字符串数组的开始或结尾应用,而不可以在字符串数组正中间出現。比如,下述句子会造成运行时错误:

dv.RowFilter = "Description LIKE 'prod*ct"


字符串数组务必以单引号括起,而时间型务必以#标记括起。字符型值能够应用小数位和科学计数法。
RowFilter也适用聚合函数,如SUM, COUNT, MIN,MAX, and AVG。假如表格中沒有数据信息行,那麼涵数将回到NULL。
在详细介绍RowFilter表达式的最终,使我们探讨三个很便捷的涵数:Len,IIF和Substring。
如同其名,Len()回到特殊表达式的长短。该表达式能够是一个字段名,还可以是别的合理合法的表达式。
Substring()回到特定的表达式自特殊部位刚开始,特殊长短的标识符子串。
我最喜欢用的是IIF(),它依照逻辑性表达式的值有一到2个值。IIF是IF-THEN-ELSE句子的紧凑型表述。英语的语法以下:

IIF(expression, if_true, if_false)


通 过该涵数,能够创建比较复杂的过虑字符串数组。比如,假设你从SQL Server的Northwind数据库查询中获得Employees表,下述表达式能够挑选出这些employeeID低于6且lastname为双数字符和employeeID超过6且lastname为合数字符的职工。

IIF(employeeID<6, Len(lastname) %2 =0, Len(lastname) %2 >0)

预排视图
在上面的举例说明中,datagrid务必承担预排视图中的数据信息行,便于更新操作界面。这一全自动体制是.NET
数据信息关联的物质。Datagrid是根据DataSource属性来读取数据的数据信息关联控制。DataView是一个可数据信息关联的类,可搭建DataSource属性的內容。

假如你要应用datagrid以外的另一个控制,应当怎么办呢?又假如你不愿应用全自动数据信息关联呢?应当如何预排视图中选定的数据信息行呢?

DataView的Table属性偏向相对的数据分析表,但DataTable并不储存过虑信息内容。因此 ,预排表中的数据信息终究不是行得通的。尽管DataTableDataView是紧密相联的,但他们分别维持单独,并实行单独的作用。
下列Visual Basic .NET代码段显示信息了怎样解析xml视图中全部的数据信息行,并添加到listbox中。

Dim dv As New DataView()
dv = ds.Tables("Employees").DefaultView
dv.RowFilter = "employeeid >5"

ListBox1.Items.Clear()
Dim buf As String
Dim dr As DataRowView
For Each dr In dv
buf = ""
buf &= dr("lastname").ToString()& ", " & dr("firstName").ToString()
ListBox1.Items.Add(buf)
Next


如同前边说提及的,DataView是可枚举类型的类,因而你可以安全性的将它发送给For..Each句子。Count属性储存了视图中数据个数,便于在For..Next循环系统中应用。
要浏览视图中某一行,能够应用DataRowView类。DataRowView可表明DataRow的视图,如同DataView表述DataTable定制的视图一样。
总体来说,DataRow数最多有四种情况:default,original,current和proposed。这种情况由DataRowVersion枚举类型设定,由RowVersion属性表述。
DataRow的视图只有是在其中某一种情况。
数据信息行的默认设置(default)版本号仅有当其列在结构时设置了初始值时才有。而原始(original)版本号就是指在最后一次启用表的AcceptChanges后,从数剧源中获得数据信息行或快照更新。当今(Current)版本号就是指当今的数据信息行,包含全部那时候产生的升级。Proposed情况只存有于启用BeginEdit和EndEdit的编写全过程中。
能够根据浏览DataRow同样的英语的语法浏览DataRowView。这儿最重要的属性叫Item。

排列和别的方便快捷的特点
DataView适用Sort属性,能够用于对视图中的內容排列。Sort由用分号隔开的字段名表达式开展排列。根据在一切字段名后加ASC或是DESC限定词,能够促使字段名依照升高或是降低的排列顺序。要是没有方位限定词,默认设置次序为ASC。
DataView是运行内存中的对象,因此 排列在当地开展,不用启用数据库查询网络服务器。
RowStateFilter是DataView另一趣味的属性。它可以用一切预订义的规范来过虑DataTable中的內容。下列中是DataViewRowState枚举类型的全部赋值:

CurrentRows 包含全部未升级的、新的和改动的数据信息行
Deleted 全部自之前启用AcceptChanges后删掉的数据信息行
ModifiedCurrent 全部自之前启用AcceptChanges后改动过的数据信息行
ModifiedOriginal 全部自之前启用AcceptChanges后original版本号的数据信息行
New 全部自之前启用AcceptChanges后新加上的行
OriginalRows 回到原始数据信息行,包括unchanged和deleted 的
Unchanged 全部未升级的数据信息行


假如要实际操作非联接的数据信息,全部升级都会对DataTable启用AcceptChanges后起效。对单一行的升级在启用DataRowAcceptChanges后起效。相近的,这种升级能够根据启用DataTableDataRow对象的RejectChanges来撤消。
DataView对象也有一些属性,如AllowEdit,AllowDeleteAllowNew,用于获得或设置是不是容许升级的值。他们的初始值设为True,容许一切类型的升级。假如在标示设成False时,你要想进行相对的升级实际操作,会有一个运行时错误产生。