五、操纵dataset
在DataSet中DataRow是其所有数据的基本存放位置,它主要是由一个值数组组成,代表DataTable单独一行。
DataRow中主要包括一下几种信息:1、行中每一列的当前值,2、行中每一列的原始值,3、行状态,4、父行与子行间的链接
初始化一个DataRow:
DataTable dataTable=dataSet.Tables[0];
DataRow newRow=dataTable.NewRow(); //用dataTable生成DataRow可以利用dataTable里面的模式
dataTable.Rows.Add(newRow);
删除行:
DataTable.Rows.Remove(行实例); //DataTable.Rows.Remove(OrderFormTable.Rows[0]);
DataTable.Rows.RemoveAt(行号);
DataRow.Delete(); //行自身移除
读写DataRow的值:
row["列名"],row[列号]均可引用其中的一个属性
DataColumn a=dataTable.Columns("列名"); //可以获得一个列
对行进行批处理更改:
BeginEdit()开始更改,EndEdit()结束更改,同时将更改结果写入DataSet,CancelEdit(),取消更改
例如:
row.BeginEdit();
对row进行更改
row.EndEdit();
将数据批量加载到DataTable
dataTable.BeginLoadData();
dataTable.LoadDataRow(row1,false); //第二个参数为true时,调用dataTable.AcceptChanges()时接受更改,为false直接添加
……
dataTable.EndLoadData();
使用这种数据加载方式可以在数据加载期间屏蔽所有的数据约束,索引也不会予以维护,极大的加快了数据加载速度
行的版本:
current:当前值
default:根据操作的不同决定行的default值
original:最后一次调用AcceptChanges()之后的值
proposed:调用AcceptChanges()之前被更改的值
例如要获得行的original值:
String oldString=row("FirstName",DataRowVersion.original);
行的状态:
row.RowState获得行的状态,例如删除后变成Deleted,数据存储更新后变为unchanged
六、DataSet导航
在ADO.NET中每个表都保持其相对独立性,允许在行级上导航不同表之间的相关行(向下导航到子行,向上导航的父行)
如DataRow[] invoiceRows=custRow.GetChildRows("Customer_invoice"); //通过关系导航到子行
七、DataView
DataView就时数据视图,为数据库结构提供了外模式的实现。
同时DataView也可以为窗体控件和Web控件提供数据绑定功能,在每一个DataTable中内建了一个DataView为:DataTable.DefaultView();
创建DataView
DataView sortedView=new DataView(dataTable);
对DataView进行排序
dataTable.DefaultView.sort="lastName";
dataTable.DefaultView.sort="lastName,FirstName DESC";
对DataView进行筛选:
1、通过对其中的RowFilter属性设置可以实现筛选
dataTable.DefaultView.RowFilter="Vendor='Rawlings'";
不过筛选表达式只能设置成比较简单的表达式,功能有限,不过可以满足基本的要求。
同样在DataTable里面也可以进行简单的搜索,返回一个DataRow数组,例:
DataRow[] compoundRows=dataTable.select("Vendor='wilson' AND price>20.00)
2、通过RowState来筛选
dataTable.DefaultView.RowStateFilter="DataViewRowState.originalRows"可以筛选出符合要求状态的row
对DataView进行搜索:
相对于DataView使用RowFilter进行筛选得到一个矩形数据集,使用Find、FindRows可以更准确的查找到与特定键相匹配的行
搜索的时候必须首先设置DataView的sort属性:
int found=dataTable.DefaultView.Find("wilson"); //获得行的位置
DataRowView[] rows=dataTable.DefaultView.FindRows("Rawlings") //过得一个row数组
八、更新DB
在DataSet中,每一个DataTable对应着一个DataAdapter,DataAdapter.Update()时,DataTable自动更新。
更新的时候可以使用CommandBuilder自动根据DataSet的变化生成更新的SQL命令
SqlCommandBuilder bldr=new SqlCommandBuilder(dataAdapter);
dataAdapter.Update(custTable);
不过Update接受DataSet参数并不更新DataSet而是更新DataSet中的一个叫"Table"的表
使用CommandBuilder进行更新的时候要注意一下几点:
1、SelectCommand必须有效
2、必须有主码
3、若SelectCommand填充DataTable后架构发生改变,应该在Update()之前调用CommandBuilder.RefreshSchema();
4、更新DB时不受关系、约束或者DataSet中其他表的影响
虽然使用CommandBuilder比较方便,不用自己写更新命令,但自动生成的命令性能不高,这时可以考虑自己编写存储过程或直接使用带参数的sql语句,例如:
String insQry="Insert into Customer(CustomerID) Values (@Customer)";
SqlCommand insCmd=conn.CreateCommand();
insCmd.CommandText=insQry;
SqlParameterCollection insParams=insCmd.Parameters;
insParams.Add("@CustomerID",SqlDbType.UniqueIdentifier,0,"CustomerID");
dataAdapter.InsertCommand=insCmd;
dataAdapter.Update();
在dataAdapter.Update()更新时还可以控制更新的范围:
dataAdapter.Update(invTable.GetChanges(DataRowState.Deleted); //只更新被删除的部分
九、事务
tx=conn.BeginTransaction(IsolationLevel.Serializable);
invDA.SelectCommand.Transaction=tx;
事务操作
tx.Commit();提交 //tx.Rollback();事务回滚
十、数据绑定
简单版本:(对文本框、标签等)
{Controls}.DataBindings.Add("{Property}",{dataSource},"{dataMember}");
其中Property为待绑定的属性,dataSource为DataView或DataTable,dataMember为dataSource其中的某个属性
复杂版本:(对ListBox、ComboBox等)
要分别设置各个属性实现绑定:
DataSource=支持IList的一个对象(DataTable或DataView)
DisplayMember:待显示的DataSource中的一个属性
ValueMember:确定在DataSource中引用哪一个数据行,即实现与DisplayMember的名值对应
DataGrid绑定:
1、可以设置DataSource属性实现静态绑定
2、可以使用SetDataBinding函数实现动态绑定
同时DataGrid支持主控/详细表显示
masterGrid.setDataBinding(customerTable,"");
detailGrid.setDataBinding(customerTable,"Customer_Invoices") //第二个属性要设置成关系约束
这样在主表中选择一行,在子表中就根据主表行中外码在子表中找到相应行
绑定之后,绑定项中就有一个CurrencyManager属性实现游标功能
BindingContext[CustomerTable]返回一个CurrencyManager对象,其中的Position属性可以更改,实现游标的移动。
分享到:
相关推荐
本文实例讲述了jQuery购物车插件jsorder用法。分享给大家供大家参考,具体如下: <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html;...link href="../css/o
DataTable.Compute方法使用实例 DataTable.Compute强大的功能 C#中表达式的计算 详细说明:http://www.our-code.com/news/2010718/n458047.html
VB.NET的DataTable常用方法总结
用ajax实现异步刷新,一半处理程序返回datable
vs2010-c#读取txt文件至DataTable经过处理后导出txt 某油田项目中数据需要处理,里面包括项目中的几个txt数据文件,主要有参考意义的是里面读取txt方法和写入txt方法 简洁有效,处理方法是针对特定数据结构编写的。
2 直接用数据库的DataReader和DataTable处理对象又不方便; 3 定义一个新类 又只有很少的地方或一个地方使用; 4 也不想使用orm; 5 那就用匿名对象加载吧 ; 支持: 1 常规类型 2 对象类型 3 匿名类型 4 常规...
Silverlight 数据处理服务端传DataTable Silverlight断直接调用方法接收转义,共同进步,下载使用后请反馈!
private DataTable Optimization_DataTable(DataView dv) { DataTable dt = dv.Table.Clone(); if (dv.Table.Rows.Count >= 1) { for (int i = 0; i ; i++) { DataRow dr_1 = dt.NewRow(); string[] str_...
有时候我们从数据库获取的数据量太大,而我们不需要一次性显示那么多的时候,我们就要对数据进行分页处理了,让每页显示不同的数据。 public DataTable GetPagedTable(DataTable dt, int PageIndex, int PageSize)...
DataGridView或DataTable导出为Excel-处理了数字字符串去掉前面0的问题-支持进度条
datatable 自定义传参,服务端返回数据处理
基于npoi的Excel读取,处理npoi读取Excel时的时间错误问题。能够选择Sheet列表读取。将数据转换成为datatable类型。
C#操作EXCEL EXCEL类库 Excel模板处理 将DataTable数据写入Excel文件 C#数据写入EXCEL EXCEL样式管理帮助类库
DATATable数据控件经典使用,可以动态根据数据的多少生成表格,DATATable 经典分页处理,Acess数据库中时间格式处理,及第三方时间控间的使用。
在处理数据的时候大家都会用到模型,从datatable遍历数据的时候可以用datatable的columns属性获取列名,然后可以动态的用datatable 生成一个josn字符串,然后再讲json字符串转化成你想要的model,是不是很方便...
主要介绍了C#中csv文件与DataTable互相导入处理实例解析,非常实用的功能,需要的朋友可以参考下
适合前端初学者 jquery中的datatable使用ajax读取数据 并展示表格数据
主要用于Ajax,客户端DataGrid数据回传处理。 { "total":20, "rows":[ {"code":"001","name":"Name 1","addr":"Address 11","col4":"col4 data"}, {"code":"002","name":"Name 2","addr":"Address 13","col...
$('#table_id_example').DataTable({ "bProcessing" : false, //是否显示加载 "sAjaxSource" : '/datatableDemo/user/json', //请求资源路径 "serverSide": true, //开启服务器处理模式 /* 使用ajax,在服务端...