成都网站建设设计

将想法与焦点和您一起共享

Datatable的基本操作.-创新互联

做项目中遇到这样一个问题:需要实现策略应用功能,首先需要查询的是都有那些策略,之后根据策略名把该策略名下在用策略放在右边的下拉框,把不再用的策略放在左边下拉框,然后可以再这里设置可用或者不可用。

创新互联公司提供高防服务器、云服务器、香港服务器、雅安移动机房

而当是设计数据库表的时候这三个地方的数据都在一个表中。如果分别查询的时候需要调用三次数据库,这不仅增加了数据库的压力,而且还增加了好多代码量。

所以,我们可以通过一次查询,在通过对datatable的操作来实现。

那么,我们如何从datatable中获取我们想要的数据呢?

DataTable newdt = new DataTable();

newdt=dt.Clone();

DataRow[] dr = dt.Select(condition);

for(int i=0;i

{

newdt.ImportRow((DataRow)dr[i]);

}

这里最值得注意的就是datatable的select方法的使用。

关于DataTable.Select();Select方法:

Select();//全部查出来

Select(过滤条件);//根据过滤条件进行过滤,如Select("columnname1 like '%xx%'");

Select(过滤条件,排序字段);//过滤,并排序,如Select("columnname1 like '%xx%'",columnname2);

通过select便可以把我们需要的信息查询出来。

下面是我们程序中的代码:

//获取需要查询的字段

           String strStrategy= ddlStrategy.SelectedValue;

           //构造查询条件

           string condition ="strategyType = '" + strStrategy + "'";

           //获取数据

           DataTabledatStrategy = QueryAllStrategy();

           //根据条件查询数据

           DataRow[] dr =datStrategy.Select(condition);

           //清空列表的所有信息

           lstNotInUse.Items.Clear();

           lstInUse.Items.Clear();

           //循环获取需要的数据

           for (int i = 0; i< dr.Length; i++)

           {

               //根据数据判断需要分别加载到哪一个listbox

               if(dr[i]["state"].ToString() == "f")

               {

                   ListItemliNotInUse = new ListItem();

                   liNotInUse.Text = dr[i]["name"].ToString();

                   liNotInUse.Value = dr[i]["id"].ToString();

                   //加载到为使用策略

                   this.lstNotInUse.Items.Add(liNotInUse);

               }

               else

               {

                   ListItemliInUse = new ListItem();

                   liInUse.Text = dr[i]["name"].ToString();

                   liInUse.Value = dr[i]["id"].ToString();

                   //加载到使用策略

                   this.lstInUse.Items.Add(liInUse);

               }

           }

在这里,因为数据要绑定到listbox,所以直接循环绑定,当然也可以把它通过ImportRow来把信息独到其他的datatable中。

Datatable除了select和importrow以后,还有两个重要的方法,就是copy和clone,其中, DataTable.Clone(),复制表结构,也就是对象的深拷贝,在c#里面,有浅拷贝和深拷贝的区别。浅拷贝,只拷贝对象的数据,对对象的修改,都将影响到原对象。深拷贝,会从新分配一个地址,保存一个对象,对新对象的修改,不会影响到原有程序。DataTable .Copy(),复制datatable结构和数据。

通过对datatable的操作,我们就可以减少对数据库读取的次数,同时也减少了代码量,一举多得!

不登高山,怎知天高;不临深溪,焉知地厚!站在坚实的土地上,做着生命中最真实的事情;像一棵挺拔的大树,认可自己的命运并敢于迎接属于这一方天空的风风雨雨。
分享名称:Datatable的基本操作.-创新互联
文章来源:http://chengdu.cdxwcx.cn/article/gesid.html