做项目中遇到这样一个问题:需要实现策略应用功能,首先需要查询的是都有那些策略,之后根据策略名把该策略名下在用策略放在右边的下拉框,把不再用的策略放在左边下拉框,然后可以再这里设置可用或者不可用。
创新互联公司提供高防服务器、云服务器、香港服务器、雅安移动机房等而当是设计数据库表的时候这三个地方的数据都在一个表中。如果分别查询的时候需要调用三次数据库,这不仅增加了数据库的压力,而且还增加了好多代码量。
所以,我们可以通过一次查询,在通过对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