简介DefaultView
一直以来在对数据进行排序, 条件查询都是直接重复构建SQL来进行, 在查询次数和数据量不多的情况下倒没觉得什么, 但慢慢得, 当程序需要对大量数据椐不同条件进行多次查廛或排序时, 使用这种方式显然对程序的性能影响将会是十分明显的, 在网上找了一下, 发现DATAVIEW能很好的解决这个问题, 其提供了一种简单直观的方式来操作数据, 如下面代码:
SqlConnection conn = new SqlConnection("server=.;database=mydata;uid=sa;pwd=123456;"); Response.Write(ds.Tables[0].DefaultView.Count); //显增当前查询结果的总行数 this.GridView1.DataSource = ds.Tables[0]; //绑定到gridview数据源 其中如果我们需要变更查询结结果, 例如得到所有goodsID字段大于10的数据, 则只需改变上面代码中的 ds.Tables[0].DefaultView.RowFilter = "Shopid = 1"; 取可, 而不需要同数据库服务器进行更多的交互操作, 从而一定程度上加快程序的执行, 而代码也简结 可能大家都知道dataview这个名词的概念,但也许不是很多人可以说清楚在.net架构中它的应用范围和程度。比如:究竟datagrid和repeater这些控件是如何和数据关联起来的?很多人会告诉我是通过dataset。这显然是正确的,但究竟最根本最直接的是通过什么联系起来的呢? 答案就是dataview。其实下面的语句:
DatagridTC.DataSource = dtRst;
DatagridTC.DataBind(); 在工作的时候,它等效于:
DatagridTC.DataSource = ds.Tables[0].DefaultView;
DatagridTC.DataBind(); dataset都是通过数据视图将数据呈现在控件上面的。那如何才能做到物尽其用呢?如果通过灵活地使用dataview让我们的程序更简洁,性能更好呢?下面通过一个例子来说明:一段程序想实现将dataset已有的一个datatable重新排序。 某个写法是:
dt = ds.Tables[0].Copy();
dt.Clear(); int intNewID = 0; for(int intI = 0;intI < ds.Tables[0].Rows.Count;intI++) { dr = dt.NewRow(); dr["DateType"] = ds.Tables[0].Rows[intI - 1 + 1]["DateType"].ToString(); dr["TCOrder"] = ds.Tables[0].Rows[intI - 1 + 1]["TCOrder"].ToString(); dr["TimeClass_ID"] = intNewID; dr["TimeClass_Name"] = ds.Tables[0].Rows[intI - 1 + 1]["TimeClass_Name"].ToString(); dr["Chn_NameLocal"] = ds.Tables[0].Rows[intI - 1 + 1]["Chn_NameLocal"].ToString(); dr["User_Name"] = ds.Tables[0].Rows[intI - 1 + 1]["User_Name"].ToString(); dr["User_ID"] = ds.Tables[0].Rows[intI - 1 + 1]["User_ID"].ToString(); dt.Rows.Add(dr); dt.AcceptChanges(); intNewID++; } dtRst = dt.Copy(); dtRst.Clear(); FoundRow = dt.Select("1 = 1", "TimeClass_Name, DateType, TCOrder"); for(int intI = 0;intI < FoundRow.Length;intI++) { dr = dtRst.NewRow(); dr["DateType"] = FoundRow[intI]["DateType"].ToString(); dr["TCOrder"] = FoundRow[intI]["TCOrder"].ToString(); dr["TimeClass_ID"] = FoundRow[intI]["TimeClass_ID"].ToString(); dr["TimeClass_Name"] = FoundRow[intI]["TimeClass_Name"].ToString(); dr["Chn_NameLocal"] = FoundRow[intI]["Chn_NameLocal"].ToString(); dr["User_Name"] = FoundRow[intI]["User_Name"].ToString(); dr["User_ID"] = FoundRow[intI]["User_ID"].ToString(); dtRst.Rows.Add(dr); dtRst.AcceptChanges(); } DatagridTC.DataSource = dtRst; DatagridTC.DataBind(); 另外一个写法是:
DataView dv = ds.Tables[0].DefaultView;
dv.Sort = "TimeClass_Name, DateType, TCOrder"; DatagridTC.DataSource = dv; DatagridTC.DataBind(); 显然方法二从代码上就简洁多了,更重要的是它不要再新创建dataset等,减少了内存和CPU的消耗。 因此大家在遇到需要排序或者过滤数据的时候,要多想想可否使用dataview来实现了。 绑定控件的时候,觉得DataSet已经很方便了,但是为什么还有DataView呢?使用DataView操作离线数据库更加方便。以下的文章也解释了如何才可以使用DataView更新回DataSet: 当使用数据视图时,可以通过从数据视图获取已筛选或排序记录(而不是直接从其所在的表中获取)来访问这些记录。在遵守某些限制的情况下,还可以通过数据视图更新、插入和删除记录:
查找记录 读取记录
DataView dataView1 = new DataView(ds.Customers);
string cname = dataView1[0]["CustomerName"].ToString(); 更新记录
dataView1[0]["CompanyName"] = "Fabrikam, Inc.";
插入记录 DataRowView drv; drv = dataView1.AddNew(); 注:不同于对DataSet的操作
// C#
DataRowView drv; drv = dataView1.AddNew(); drv["CustomerID"] = "AAA"; drv["CompanyName"] = "AAFabrikam, Inc."; drv["City"] = "Aurora"; 删除记录
// C# dataView1.Delete(0); |
简介DefaultView相关推荐
- C#中DataTable简介
一.DataTable简介 (1)构造函数 DataTable() 不带参数初始化DataTable 类的新实例. DataTable(string t ...
- 第二章(1)WEB 页面简介
摘要:在这一章中,我们对Web Form 页面进行了介绍,通过几个实例,我们分别介绍了Server 控件,HTML Server 控件,以及Web Form的事件模型.在下面的章节中,我们将对本章所涉 ...
- etcd 笔记(01)— etcd 简介、特点、应用场景、常用术语、分布式 CAP 理论、分布式原理
1. etcd 简介 etcd 官网定义: A highly-available key value store for shared configuration and service discov ...
- Docker学习(一)-----Docker简介与安装
一.Docker介绍 1.1什么是docker Docker是一个开源的应用容器引擎,基于Go语言并遵从Apache2.0协议开源 Docker可以让开发者打包他们的应用以及依赖包到一个轻量级,可移植 ...
- 【Spring】框架简介
[Spring]框架简介 Spring是什么 Spring是分层的Java SE/EE应用full-stack轻量级开源框架,以IOC(Inverse Of Control:反转控制)和AOP(Asp ...
- TensorRT简介
TensorRT 介绍 引用:https://arleyzhang.github.io/articles/7f4b25ce/ 1 简介 TensorRT是一个高性能的深度学习推理(Inference) ...
- 谷粒商城学习笔记——第一期:项目简介
一.项目简介 1. 项目背景 市面上有5种常见的电商模式 B2B.B2C.C2B.C2C.O2O B2B 模式(Business to Business),是指商家和商家建立的商业关系.如阿里巴巴 B ...
- 通俗易懂的Go协程的引入及GMP模型简介
本文根据Golang深入理解GPM模型加之自己的理解整理而来 Go协程的引入及GMP模型 一.协程的由来 1. 单进程操作系统 2. 多线程/多进程操作系统 3. 引入协程 二.golang对协程的处 ...
- Linux 交叉编译简介
Linux 交叉编译简介 主机,目标,交叉编译器 主机与目标 编译器是将源代码转换为可执行代码的程序.像所有程序一样,编译器运行在特定类型的计算机上,输出的新程序也运行在特定类型的计算机上. 运行编译 ...
最新文章
- 你真的了解Grid布局吗?
- Latex中的一些表格用法总结(二)——行列式的表格,表格的切分和合并
- 电容二极管升压电路分析
- 年结 利润分配-未分配利润年结
- Linkis EngineConnPlugin引擎插件安装文档
- windowsCE异常和中断服务程序初探
- 常用的一些页面操作 js jsp check
- leetcode —— 77. 组合
- upupw启动mysql失败,Can't init tc log
- 想赚钱,赚大钱,必须要有商业思维
- 苹果 5G 芯片“难产”!
- 谷歌Linux基金会等联合推出开源软件签名服务 sigstore,提振软件供应链安全
- 编译安装squid3.1--亲测
- 阿里云因 bug 禁用内部 IP 导致链路不通,造成大规模故障
- Rust : 如何将C字符串转换为Rust字符串并通过FFI返回?
- scholarscope不显示影响因子_一劳永逸:这两个查看影响因子的插件你安装了吗?...
- python股票收益率计算_股票分析之——收益率(附完整代码和讲解)
- windows无法访问 计算机打印机,windows无法打开添加打印机解决方法
- 简述MFC程序生与死
- 一套开源三维管线管理系统
热门文章
- Leetcode_12_Integer to Roman
- 《实用C++》第10课:if 语句实现关系运算
- VLOOKUP函数最常用的10种用法
- Java Mail---SMTP协议-Java发邮件(带附件)演示过程
- 怎么选择.net培训机构
- windows开启SMB
- 固实压缩文件容易损坏_你不知道的压缩软件小技巧1
- Tensorflow2.3用SaveModel保存训练模型.pb等文件+opencvino转IR文件
- IP RAN基站回传中的三大组网方案
- Stata绘图:多维柱状图绘制