zoukankan      html  css  js  c++  java
  • Datatable的基本操作 . 天高地厚

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

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

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

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

    DataTable newdt = new DataTable();

    newdt=dt.Clone();

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

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

    {

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

    }

     

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

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

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

  • 相关阅读:
    Servant:基于Web的IIS管理工具
    mono-3.4.0 源码安装时出现的问题 [do-install] Error 2 [install-pcl-targets] Error 1 解决方法
    使用 OWIN Self-Host ASP.NET Web API 2
    Xamarin和微软发起.NET基金会
    SQLite vs MySQL vs PostgreSQL:关系型数据库比较
    Mono 3.2.7发布,JIT和GC进一步改进
    如何使用Microsoft技术栈
    c#开源消息队列中间件EQueue 教程
    通过一组RESTful API暴露CQRS系统功能
    NEsper Nuget包
  • 原文地址:https://www.cnblogs.com/net2012/p/2886310.html
Copyright © 2011-2022 走看看