`
java-mans
  • 浏览: 11456307 次
文章分类
社区版块
存档分类
最新评论

关于Tables["abc"].DefaultView[0]中abc和defaultview[0]意义

 
阅读更多

DefaultView[0] 这个0表示这个查询出来的视图中的第一行,如果DefaultView[1],那么就是这个第二行

拓展学习【转载】:

eg:

sda.SelectCommand = new SqlCommand("select dw from sldw", con);
sda.Fill(ds, "sldw");
this.ddlsldw.DataSource = ds.Tables["sldw"].DefaultView;这样就是一个视图,如果
ds.Tables["sldw"].DefaultView[0]这样是结果集中的第一行,ds.Tables["sldw"].DefaultView[1]这样是结果集中的第二行

一直以来在对数据进行排序, 条件查询都是直接重复构建SQL来进行, 在查询次数和数据量不多的情况下倒没觉得什么, 但慢慢得, 当程序需要对大量数据椐不同条件进行多次查廛或排序时, 使用这种方式显然对程序的性能影响将会是十分明显的, 在网上找了一下, 发现DATAVIEW能很好的解决这个问题, 其提供了一种简单直观的方式来操作数据,

【实例学习】--代码:
SqlConnection conn = new SqlConnection("server=.;database=mydata;uid=sa;pwd=123456;");
conn.Open();
SqlDataAdapter adp = new SqlDataAdapter();
adp.SelectCommand = new SqlCommand("select * from goods",conn);
DataSet ds = new DataSet();
adp.Fill(ds, "goods"); //填充DataSet内存数扰库
Response.Write(ds.Tables[0].DefaultView.Count); //显增当前查询结果的总行数
ds.Tables[0].DefaultView.Sort = "GoodsID Desc"; //这里设定排序的字段及方式
ds.Tables[0].DefaultView.RowFilter = "Shopid = 1"; //设定过滤条件, 得到条件潢足为”ShopID =1 的所有数据”
this.GridView1.DataSource = ds.Tables[0]; //绑定到gridview数据源
this.GridView1.DataBind();
其中如果我们需要变更查询结结果, 例如得到所有goodsID字段大于10的数据, 则只需改变上面代码中的
ds.Tables[0].DefaultView.RowFilter = "Shopid = 1";
改为
ds.Tables[0].DefaultView.RowFilter = "goodsID > 10";
取可, 而不需要同数据库服务器进行更多的交互操作, 从而一定程度上加快程序的执行, 而代码也简结
可能大家都知道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:
作用:
当使用数据视图时,可以通过从数据视图获取已筛选或排序记录(而不是直接从其所在的表中获取)来访问这些记录。在遵守某些限制的情况下,还可以通过数据视图更新、插入和删除记录:
数据视图必须包含有关每个记录的足够信息,以便能够确定记录在数据表中的位置。这些信息可以包含一个主键或其他列(这些列合在一起可以提供足够的信息来唯 一标识记录,如客户名称、地址和城市)。对于每个操作,数据视图的 AllowEdit、AllowNew 和 AllowDelete 属性必须相应设置为 true

查找记录
查找数据视图中的记录
将数据视图的 Sort 属性设置为您要搜索的一列或多列。
调用数据视图的 Find 或 FindRows 方法,传递该它要在排序后的列中进行查找的值。
如果想要查找单个记录,则调用 Find 方法。
- 或 -
如果想要查找多个记录,则使用 FindRows 方法。
dataView1.Sort = "CustomerID";
int foundIndex = dataView1.Find(textBox1.Text);
注:使用Find方法应先Sort


读取记录
读取数据视图中的记录
使用索引值指向数据视图中要访问的记录。
可以通过在数据视图中按名称引用列来访问列,如下面的示例所示,它获取视图中第一个记录的客户名称:
DataView dataView1 = new DataView(ds.Customers);
string cname = dataView1[0]["CustomerName"].ToString();
更新记录
通过数据视图更新记录
在代码中,使用索引值标识要更新的记录,然后通过引用列名称来设置列值。
注意 如果数据视图的 AllowEdit 属性设置为 false,则不能通过数据视图编辑记录。
下面的示例说明如何标识和更新一列。
dataView1[0]["CompanyName"] = "Fabrikam, Inc.";


插入记录
通过数据视图插入记录
调用数据视图的 AddNew 方法,它创建新记录并返回一个 DataRowView 对象:

DataRowView drv;
drv = dataView1.AddNew();
注:不同于对DataSet的操作
像更新任何数据视图记录一样来更新记录。
注意 如果数据视图的 AllowNew 属性设置为 false,则不能通过数据视图插入记录。
下面的示例展示如何向视图添加新记录,更新其中的三个字段:
// C#
DataRowView drv;
drv = dataView1.AddNew();
drv["CustomerID"] = "AAA";
drv["CompanyName"] = "AAFabrikam, Inc.";
drv["City"] = "Aurora";

删除记录
通过数据视图删除记录
调用数据视图的 Delete 方法,向其传递要删除记录的索引:
注意 如果数据视图的 AllowDelete 属性设置为 false,则不能通过数据视图删除记录。

分享到:
评论

相关推荐

    C# id in.pdf

    private bool FindSelectedTable(ref System.Data.DataTable table) { ... table.DefaultView.RowFilter = "ID in (" + idsString + ")"; table = table.DefaultView.ToTable(); return true; }

    获取css样式表内样式的js函数currentStyle(IE),defaultView(FF)

    JS从样式表取值的函数,IE中以currentStyle,firefox中defaultView来获取,需要的朋友可以参考下。

    城市的连动效果

    this.ddl_Province .DataSource = ds.Tables[Tablename].DefaultView; this.ddl_Province .DataTextField = "province"; this.ddl_Province .DataValueField = "provinceID"; this.ddl_Province .DataBind(); ...

    GridView和下拉菜单DropDownList结合

    DataRowView mydrv = ds.Tables[0].DefaultView[i]; ddl = (DropDownList)GridView1.Rows[i].FindControl("depList"); ddl.SelectedValue = ds.Tables[0].Rows[i]["DepId"].ToString(); ddl = (DropDownList)...

    repeater实现分页

    objPds.DataSource = ds.Tables[0].DefaultView; objPds.AllowPaging = true; objPds.PageSize = 5; int CurPage; //当前页面从Page查询参数获取 if (Request.QueryString["Page"] != null) CurPage=Convert...

    模拟QQ下拉菜单 c#

    模拟QQ下拉菜单 int ParentID = Convert.ToInt32(dv[i]["ids"].ToString()); string strSql2 = "select * from tb... DataView dv2 = ds2.Tables["db_Menu"].DefaultView; HtmlTableRow myrow2 = new HtmlTableRow();

    C#实现Datatable排序的方法

    一般来说,在C#中要对Datatable排序,可使用DefaultView的Sort方法。需要先获取Datatable的DefaultView,然后设置得到的Dataview的sort属性,最后用视图的ToTable方法将排好序的dataview导出为Datatable。 代码如下...

    jquery.fullCalendar官方文档翻译

    2.2. defaultView: 字符串类型, 默认是’month; 2.2.1. 允许的views: 2.2.1.1. month 一页显示一月, 日历样式 2.2.1.2. basicWeek 一页显示一周, 无特殊样式 2.2.1.3. basicDay 一页显示一天, 无特殊样式 2.2....

    C#中DataTable排序、检索、合并等操作实例

    用排序后的视图导出的新DataTable替换就DataTable(Asc升序可省略,多列排序用”,”隔开)1)、重生法 代码如下:dstaset.Tables.Add(dt)dataset.Tables(0).DefaultView.Sort = “id desc”2)、直接法 代码如下:dv = ...

    javascript获取隐藏元素(display:none)的高度和宽度的方法

    obj.currentStyle[attribute]:document.defaultView.getComputedStyle(obj,false)[attribute];}但是如果这个元素是隐藏(display:none)的,尺寸又是未知自适应的,哪有上面的方法就不行了!因为display:none的元素是...

    datagridview增删改查

    this.dataGridView1.DataSource = ds.Tables["table"].DefaultView; } private bool BtnInsert() //此方法作用于添加 ...{ da.InsertCommand = conn.CreateCommand(); da.InsertCommand.CommandText = ...

    js CSS操作方法集合

    //获取元素的真实的,最终的CSS样式属性值的函数 function ... }else if(document.defaultView && document.defaultView.getComputedStyle){ name = name.replace(/([A-Z])/g,”-$1″); name = name.toLowerCase

    Jquery作者John Resig自己封装的javascript 常用函数

    代码如下://获取元素的样式值。 function getStyle(elem... }else if(document.defaultView&&document.defaultView.getComputedStyle){ name=name.replace(/([A-Z])/g,”-$1″); name=name.toLowerCase(); var s=docume

    Codelab_ScanKit_DefaultView_Full_Demo.zip

    下载即可用哟 无需任何修改 支持远距离,多角度,有污损 实际效果远强于zxing 只是可惜不开源,永久免费 详细可以参考我的博客哟

    完整宿舍管理系统设计与开发

    GridView1.DataSource = ds.Tables["charge"].DefaultView; GridView1.DataBind(); } else { Label2.Text = "共有0条记录!"; GridView1.DataBind(); } } protected void Calendar1_SelectionChanged...

    Repeater分页显示

    pds.DataSource = ss.Tables["temptable"].DefaultView; pds.AllowPaging = true; pds.PageSize = 2; pds.CurrentPageIndex = Convert.ToInt32(this.labPage.Text) - 1; Repeater1.DataSource = pds; ...

    灵活掌握asp.net中gridview控件的多种使用方法(下)

    继续上篇文章的学习《灵活掌握asp.net中gridview控件的多种使用方法(上)》,在此基础上巩固gridview控件的操作使用,更上一层楼。 ...mydrv = myds.Tables[飞狐工作室].DefaultView[i];//表名 gIn

    datagridview 分页

    return FCT.Common.PublicMethods.ConvertToDataSet(bcdicBll.GetAll(areaid)).Tables[0]; } } else return null; } //根据页索此获取数据 private void InitData(int pageindex) { DataTable dt = ...

    登陆界面和一些小技术

    使用于新手关于数据的一些控件! public static DataTable ds(string que) { //返回一个装载了SQL制定留言的数据表, string connString = System.Configuration.ConfigurationManager.ConnectionStrings[...

    canvas-mock:我创建它是为了在 Node.js 环境中运行 Phaser.js 时使用。 这个可以代替node-canvas来模拟canvas的存在

    画布模拟我创建它是为了在 Node.js 环境中运行 Phaser.js 时使用。 这可以用来代替节点画布来模拟画布的存在。安装将其安装为任何其他节点模块: npm install canvas-mock 用法该模块将模拟画布函数附加到元素。 这...

Global site tag (gtag.js) - Google Analytics