DataView view = new DataView();
view.Table = DataTableA;
view.RowFilter = "itemType = 'book'";//itemType是DataTableA中的一个字段
DataTableB= view.ToTable();
或者:
DataRow[] rows = DataTableA.Select("itemType = 'book'");
DataTableB= DataTableA.Clone();
foreach (DataRow row in rows)
{
     DataTableB.ImportRow(row);
}
或者
 
/// 执行DataTable中的查询返回新的DataTable
/// </summary>
/// <param name="dt">源数据DataTable</param>
/// <param name="condition">查询条件</param>
/// <returns></returns>
private DataTable GetNewDataTable(DataTable dt, string condition,string sortstr)
{
      DataTable newdt = new DataTable();
      newdt = dt.Clone();
      DataRow[] dr = dt.Select(condition,sortstr);
      for (int i = 0; i < dr.Length; i++)
      {
          newdt.ImportRow((DataRow)dr[i]);
      }
      return newdt;//返回的查询结果
 
}
 
 
 
 
 
或者 逐列的形式
 
public static int TableDataExchange(DataSet ds, string tableName, DataTable sourceDT)
        {
             for(int i=0;i<sourceDT.Rows.Count;i++)
             {
                 DataRow drNew = ds.Tables[tableName].NewRow();
                 foreach (DataColumn dc in sourceDT.Columns)
                 {
                     drNew[dc.ColumnName] = sourceDT.Rows[i][dc.ColumnName];
                 }
                 ds.Tables[tableName].Rows.Add(drNew);
             }
             ds.Tables[tableName].AcceptChanges();
             DataTable dt = ds.Tables[tableName];
             return ds.Tables[tableName].Rows.Count;
            
        }
 
 
 
 
 
或者
 
 
 
DataSet 对象是支持 ADO.NET的断开式、分布式数据方案的核心对象 ,用途非常广泛.我们很多时候需要使用其中的数据,比如取得一个DataTable的数据或者复制另一个DataTabe中的数据或者是DataRow的数据,但是只有DataSet和DataTable的复制是支持深层复制的,就是说不仅能复制元素的结构,而且能复制元素的数据,而DatatDataRow没有相关的复制的方法,下面将简单介绍下这些数据元素的复制问题。
 
DataTable sourceTable;
DataTable objectTable;
DatatDataRow sourceRow;
DatatDataRow objectRow;
DataRow tempRow;
DataSet souceDataSet = new DataSet();
 
复制DataSet
 
  DataSet object = souceDataSet.Copy();//深复制
  DataSet object = souceDataSet.Clone();//浅复制,只复制架构
 
复制DataTable
 
  objectTable  = sourceTable .Copy();//深复制
  objectTable  = sourceTable .Clone();//浅复制,只复制架构
 
复制DataRow
 
    项目开发中经常遇到这种错误-“此行已属于另一个表” 。导致这个错误的语句如下:

objectTable .Rows.Add(SourceDataRow);
 
 
      分析了一下原因,因为DataRow DataTable 都是传引用调用的。所以一个行在一个表中了,就不能再增加到另外一个表。
 
 
 
具体方法:
 
 
 
1  ImportRow方法:public void ImportRow( DataRow DataRow);
 
objectTable = sourceTable.clone();//必须先复制表的架构,使具有相同的的列或关系!
foreach (DataRow oRow in sourceTable)
{
 
       objectTable.ImportRow(oRow);//在objectTable中添加一个新行,并将sourceRow的值复制进去,要求表的结构一样!
 
}
 
_____________________________________________________________________________________________________
 
2. 循环DataTable的每个列
 
DataRow aDataRow = objectTable.NewRow();
 
    foreach(DataColumn aDataColumn in sourceTable.Columns)
 
    {
 
        aDataRow [aDataColumn.ColumnName] = sourceTable[i][aDataColumn.ColumnName];
 
    }
 
    objectTable.Rows.Add(aDataRow);
 
3. 自定义复制
 
objectTable.Columns.Add ("id");//不需要有一样的架构,只复制自己需要的列! 
Object [] myArry = new Object [1]; 
   foreach (DataRow oRow in sourceTable)
{
 
  tempRow = objectTable.NewRow();//此方法必须调用!
  myArry[0] = oRow["id"];//如果myArry中没有源表中的id列的话就会报错!
  tempRow.ItemArray = myArry;//ItemArray属性为Object类型数组,根据程序的需要需要可自行复制多个列的数据!
  objectTable.Rows.Add(tempRow); //此方法必须调用,否则DataRow中的数据将不能显示!
 
}
_____________________________________________________________________________________________________
 
4. LoadDataRow方法:public DataRow LoadDataRow(Object[] values,bool fAcceptChanges);
 
    Object[] newRow = new Object[3];
   // 设置对象数组的值
    newRow[0] = "Hello";
    newRow[1] = "World";
    newRow[2] = "two";
    DataRow myRow;
    ObjectTable.BeginLoadData();
    // 将新行添加到表中
    myRow = ObjectTable.LoadDataRow(newRow, true);//标志要设置为true,表示添加新行
    ObjectTable.EndLoadData();

该方法比较复杂,如果只是简单的复制现有行的数据来添加新行的话建议不要采用,具体用法请参看sdk文挡。
 
 
 
 
 
或者:
 
< type="text/JavaScript"> alimama_pid="mm_10249644_1605763_4929893"; alimama_titlecolor="0000FF"; alimama_descolor ="000000"; alimama_bgcolor="FFFFFF"; alimama_bordercolor="E6E6E6"; alimama_linkcolor="008000"; alimama_bottomcolor="FFFFFF"; alimama_anglesize="0"; alimama_bgpic="0"; alimama_icon="0"; alimama_sizecode="16"; alimama_width=658; alimama_height=60; alimama_type=2; < src="http://a.alimama.cn/inf.js" type=text/javascript>
 
我们经常需要向DataTable中添加一行数据,大多数的情况下都是把一些从UI的控件和程序的变量中收集的数据添加到DataTable中。如以下的语句把供应商代码和名称添加到DataTable中:
 
DataTable dtProvider = new DataTable();
            DataRow drRow = dtProvider.NewRow();
            drRow[0] = txtProviderCode.Text.Trim();
            drRow[1] = txtProviderName.Text.Trim();
            dtProvider.Rows.Add(drRow);
 
 
 
大多数的情况下这几行语句是完全可以满足要求的。但是如果想把另一个同样结构的DataTable的某一行添加到这个dtProvider中,就不能简单的添加了。否则会提示一个错误“This row belongs to another table.”。这个时候我们必须定义另一个DataRow,把源DataRow的数据赋到目的DataRow中,再Add进DataTable中就可以了。如下所示:
 
DataTable dtProvider = new DataTable();
            DataRow drTarget = dtProvider.NewRow();
            drTarget.ItemArry = drSource.ItemArry;
            // 注意:这里的drSource是另一个相同结构的DataTable中的一行。
            dtProvider.Rows.Add(drTarget);
            < type="text/JavaScript"> alimama_pid="mm_10249644_1605763_5027492"; alimama_type="f"; alimama_sizecode ="tl_1x5_8"; alimama_fontsize=12; alimama_bordercolor="FFFFFF"; alimama_bgcolor="FFFFFF"; alimama_titlecolor="0000FF"; alimama_underline=0; alimama_height=22; alimama_width=0; < src="http://a.alimama.cn/inf.js" type=text/javascript>

一个DataTable赋值给另一个DataTable的常用方法的更多相关文章

  1. C++为什么不可以把一个数组直接赋值给另一个数组

    今天好奇一个问题, int a[3] = {1,2,3]; int b[3]; b=a; 编译器报错, 网上找了一圈, 大概明白: C++就是如此设定的, 数组不能直接赋值, 可以使用std::cop ...

  2. 将DataTable某一列的值整体赋值给 另一个DataTable

    将 DataTable某一列的值,赋值给 另一个DataTable: DataSet _ds=bll.GetAllList(); //将要取其中一列 DataView view = _ds.Table ...

  3. datatable赋值行

    datatable复制行:DataTable dt = "";  //这里是填充DataTable数据(""中为一个为datatable类型的值,赋值给dt)D ...

  4. Oracle下批量将一个用户的所有表的select权限赋值给另外一个用户

    起因 为什么会有这篇文章呢? 因为最近在做项目的时候遇到一个问题...实际生产环境中程序datasource登陆的Oracle数据库用户user1不是我们创建的.这个用户没有访问我们业务表的权限(因为 ...

  5. java中将一个字符数组赋值给另一个,两者同时变化

    java中将一个字符数组赋值给另一个,两者的变化怎么是同步的?怎么才能让他们独立开? 比如有一个int[][] a 已经存在值,现在定义int[][] b=a;之后改变a的值,为何b也跟着改变?怎么才 ...

  6. oracle赋值问题(将同一表中某一字段赋值给另外一个字段的语句)

    将同一表中某一字段赋值给另外一个字段的语句update jxc_ckmx ckmx1 set ckmx1.ddsl = (select ckmx2.sl from jxc_ckmx ckmx2 whe ...

  7. Java8 利用Lambda处理List集合循环给另外一个List赋值过滤处理

    1.利用stream().forEach()循环处理List; List<String> list = Lists.newArrayList();//新建一个List 用的google提供 ...

  8. Python把同一个对象循环赋值给另外一个变量

    Python把同一个对象循环赋值给另外一个变量,修改一个对象,其他对象也修改了 >>> row=['_'] * 3 >>> board = [] >>& ...

  9. C# Hashtable赋值给另一个Hashtable时

    c#中想将一个hashtable的元素全部给另一个hashbale时, 使用迭代一个一个元素赋值 如: ammus.Clear(); IDictionaryEnumerator ie = _temp. ...

随机推荐

  1. GLSL基础

    GLSL基础 OpenGL Shading Language GLSL作为一种着色语言是纯粹的和GPU打交道的计算机语言.因为GPU是多线程并行处理器,所以GLSL直接面向SIMD模型的多线程计算.G ...

  2. c# 网络是否连接

    c#  网络是否连接 方案一: using System; using System.Collections.Generic; using System.Linq; using System.Text ...

  3. 设置Windows Azure Linux虚拟机中的root账户

    使用Windows Azure 创建好Linux虚拟机之后,如果你使用默认的用户密码登陆root是不行的,如下图所示: 其原因是Windows Azure创建Linux虚拟机时并没有同时设置root密 ...

  4. svn服务器及客户端安装使用

    一.服务器安装: 1.yum install subversion   2.输入rpm -ql subversion查看安装位置,如下图:   我们知道svn在bin目录下生成了几个二进制文件. 输入 ...

  5. Android 判断用户2G/3G/4G移动数据网络

    Android 判断用户2G/3G/4G移动数据网络 在做 Android App 的时候,为了给用户省流量,为了不激起用户的愤怒,为了更好的用户体验,是需要根据用户当前网络情况来做一些调整的,也可以 ...

  6. 命令 crontab

    crontab命令选项基本只有对用户操作的选项: -u 指定一个用户 -l 列出某个用户的任务计划 -r 删除某个用户的任务 -e 编辑某个用户的任务 所以,要查看所有用户的,只能根据/etc/pas ...

  7. 下拉刷新控件(5)SwipeRefreshLayout官方教程(下)响应刷新事件

    http://developer.android.com/training/swipe/respond-refresh-request.html This lesson shows you how t ...

  8. pl/sql programming 05 循环迭代处理

    使用循环应考虑的因素 1. 循环什么时候结束 2. 什么时候测试是否该结束循环 3. 采用这种循环的原因 1. 普通循环(简单循环) 使用场合, 不能确定循环执行多少次, 要求循环至少执行一次. 另外 ...

  9. HeadFirst Jsp 06 (会话管理)

    现在我们希望能够跨多个请求保留客户特定的状态. 现在, 模型中的业务只是检查请求中的参数, 并返回一个响应(建议), 应用中没有谁记得在当前请求之前与这个客户之间发生过什么. 与一个客户的整个会话期间 ...

  10. Jenkins+Maven+SVN搭建自动部署、自动测试环境

    .打开http://10.3.15.78:8080/jenkins/,第一次进入里面没有数据,我们需要创建job,我们这有2个项目,需要创建2个job.http://10.3.34.163:9890/ ...