DataColumn
DataColumn 是用于创建 DataTable 的列。下面示例使用不同技巧创建、配置一个列,并把它添加到一个 DataTable 中。
using System;
using System.Data.SqlClient;
using System.Data; namespace Test
{
class Program
{
static void Main(string[] args)
{
DataTable dt = new DataTable(); //在一个DataTable中添加一个DataColumn,并对列进行设置
DataColumn col1 = dt.Columns.Add();
col1.ColumnName = "Col1";
col1.DataType = typeof(int);
col1.DefaultValue = 0;
col1.Unique = true;
col1.AllowDBNull = false; //创建并设置一个DataColumn,并添加到DataTable中
DataColumn col2 = new DataColumn();
col2.ColumnName = "Col2";
col2.DataType = typeof(string);
col2.MaxLength = 50;
dt.Columns.Add(col2); //使用DataTable的Columns属性所提供的ColumnCollection对象的Add()方法
dt.Columns.Add("Col3", typeof(string)).MaxLength = 50; //创建多个DataColumn对象,使用DataTable的Columns属性所提供的ColumnCollection对象的AddRange()方法
DataColumn col4 = new DataColumn("Col4");
DataColumn col5 = new DataColumn("Col5");
dt.Columns.AddRange(new DataColumn[] { col4, col5 }); foreach (DataColumn col in dt.Columns)
{
Console.WriteLine(col.ColumnName);
}
Console.ReadKey();
}
}
}
DataColumn 构造函数有5个重载版本:
- DataColumn()
- DataColumn(string colName)
- DataColumn(string colName,Type dataType)
- DataColumn(string colName,Type dataType,string expression)
- DataColumn(string colName,Type dataType,string expression,MappingType mappingType)
其中:
colName:列名
dataType:列的数据类型,为Type类所支持的成员
expression:用于创建列的表达式
mappingType:指定了在转换为 XML 文档时,列是如何映射到元素或属性的,可以指定为 Element、Attribute、SimpleContent、Hidden
DataColumn 配置属性:
AllowDbNull:是否允许空值
AutoIncrement:是否自增
AutoIncrementSeed:自增的初始值
AutoIncrementStep:自增的递增值
ColumnMapping:当转换为 XML 时如何映射,可以指定为 Element、Attribute、SimpleContent、Hidden
ColumnName:列名
DataType:数据类型,为Type类所支持的成员
DateTimeMode:指定了DataSet 中 DateTime 列是如何进行串行化的,可以是 DataSetDateTime 枚举值之一
DefaultValue:默认值
Expression:用于计算列的值(或聚合值)的表达式
ExtendedProperties:与列相关联的用户自定义信息
MaxLength:文本类型的最大长度
Namespace:从包含该列的 DataTable 或 DataSet 对象读取和写入 XML 时该列的命名空间
Ordinal:该列在一个 DataColumnCollection 集合中的位置
Prefix:XML 的前缀,它是从包含该列的 DataTable 或 DataSet 对象读取和写入 XML 时该列的 XML 命名空间的别名
ReadOnly:该列是否只读
Unique:该列值是否唯一
DataColumnCollection 包含了一些 DataColumn 对象,DataTable 具有一个 DataColumnCollection 对象,可以通过 DataTable 的 Columns 属性来访问。我们使用这个属性来访问和管理 DataTable 中的列。DataColumnCollection 提供了一些成员,用于管理集合中的列。
DataColumnCollection 类的关键方法:
Add():向 DataColumnCollection 添加一个 DataColumn,这个方法有多个重载版本
AddRange():把一个 DataColumn 数组的成员复制到一个 DataColumnCollection 的尾部
CanRemove():返回一个标志,表示是否可以从 DataColumnCollection 删除一个 DataColumn 对象
Clear():清空 DataColumnCollection 的所有列
Contains():返回一个标志,表示 DataColumnCollection 是否包含了一个具有指定 ColumnName 的 DataColumn 对象
CopyTo():把 DataColumnCollection 的所有元素复制到一个一维 DataColumn 数组
IndexOf():返回一个基于0的索引,表示一个由 ColumnName 或 DataColumn 对象所指定的 DataColumn 在集合中第一次出现的位置,如果不存在这个列返回-1
Remove():删除一个由 ColumnName 或 DataColumn 对象所指定的 DataColumn 对象
RemoveAt():在 DataColumnCollection 中删除一个具有指定索引的 DataColumn 对象
下例显示了如何添加一个经过计算产生的列:
using System;
using System.Data.SqlClient;
using System.Data; namespace Test
{
class Program
{
static void Main(string[] args)
{
string connStr = @"Data Source=.;Initial Catalog=MyTest;Integrated Security=True;";
string sqlStr = "SELECT * FROM tb_SalesDetail";
SqlDataAdapter adp = new SqlDataAdapter(sqlStr, connStr);
DataTable dt = new DataTable();
adp.Fill(dt);
dt.Columns.Add(new DataColumn("Total", typeof(Decimal),"UnitPrice*(1-Disc)*Qty"));
foreach (DataRow row in dt.Rows)
{
Console.WriteLine("ID={0},UnitPrice={1},Disc={2},Qty={3},Total={4}", row["ID"], row["UnitPrice"], row["Disc"], row["Qty"], row["Total"]);
} Console.ReadKey();
}
}
}
运行结果如下:

下例显示了如何向一个显示父表数据的子 DataTable 添加一个列:
string connStr = @"Data Source=.;Initial Catalog=MyTest;Integrated Security=True;";
string sqlStr = @"SELECT * FROM tb_SalesHeader;SELECT * FROM tb_SalesDetail;";
DataSet ds = new DataSet();
SqlDataAdapter adp = new SqlDataAdapter(sqlStr, connStr); adp.TableMappings.Add("Table", "tb_SalesHeader");//列名
adp.TableMappings.Add("Table1", "tb_SalesDetail");//行 数据
adp.Fill(ds); //定义关系,关系的名称 父 子
DataRelation dr = new DataRelation("tb_SalesHeader_tb_SalesDetail", ds.Tables["tb_SalesHeader"].Columns["OrderID"], ds.Tables["tb_SalesDetail"].Columns["OrderID"]);
//获取用于将表链接起来并允许从父表浏览到子表的关系的集合。
ds.Relations.Add(dr);
ds.Tables["tb_SalesDetail"].Columns.Add("CustomerID", typeof(string), "Parent(tb_SalesHeader_tb_SalesDetail).CustomerID");
for (int i = ; i < ds.Tables["tb_SalesHeader"].Rows.Count; i++)
{
DataRow rowHeader = ds.Tables["tb_SalesHeader"].Rows[i];
Console.WriteLine("Header:OrderID={0},CustomerID={1}", rowHeader["OrderID"], rowHeader["CustomerID"]);
foreach (DataRow rowDetail in rowHeader.GetChildRows(dr))
{
Console.WriteLine("\tDeatil:OrderID={0},DetailID={1},CustomerID={2}", rowDetail["OrderID"], rowDetail["ID"], rowDetail["CustomerID"]);
}
} Console.ReadKey();
运行结果如下:

表达式列创建了一个经过计算的列,表示一条相关记录的信息。我们可以通过在父表列名前添加前缀 Parent. 引用父表记录中的一个列。如果由于多个数据关系的原因存在多个父表,就在括号内指定 DataRelation 的名称,把前缀 Parent(DataRelationName). 添加到父表的名称之前,因此上例中完全可以简写为:
ds.Tables["tb_SalesDetail"].Columns.Add("CustomerID",typeof(string), "Parent.CustomerID");
我们也可以通过在子表列名前加前缀 Child. 来引用一个子表记录。
此外,表达式列也支持下列聚合函数:
AVG:所有值的平均数
COUNT:值的数量
MAX:最大值
MIN:最小值
STDEV:所有值的统计标准差
SUM:所有值的和
VAR:所有值的统计方差
如果父记录不存在子记录,聚合函数将返回一个 null 。
DataColumn的更多相关文章
- 【MVVM DEV】DataColumn中的TextBox与ComboBox的并存
一.前言 在WPF编程中,有时候我们使用DataGrid会需要在一个DataColumn中既有TextBox,也要有ComboBox或者TextBlock等其他数据显示样式. 这个时候我们 ...
- DataTable DataRow DataColumn DataSet
1.DataTable 数据表(内存) 2.DataRow DataTable 的行 3.DataColumn DataTable 的列 4.DataSet 内存中的缓存
- 转:DataSet、DataTable、DataRow、DataColumn区别及使用实例
DataSet 表示数据在内存中的缓存. 属性 Tables 获取包含在 DataSet 中的表的集合. ds.Tables["sjxx"] DataTable 表示内存中数据的 ...
- 解决DataTable中的DataColumn类型默认为int类型时, 导致不能修改其列值为其他类型的解决办法
问题起因: 扔给数据库一条select * from [表名] , 得到一个DataTable, 发现有一列status状态的DataColumn的类型是int,然后我想换成字典表里的文字描述,然后就 ...
- DataSet、DataTable、DataRow、DataColumn区别及使用实例
DataSet 表示数据在内存中的缓存. 属性 Tables 获取包含在 DataSet 中的表的集合. ds.Tables["sjxx"] DataTable 表示内存中数据的 ...
- C#新DataColumn类Type生成的方法类型参数
DataColumn有的需要等级Type构造类型的参数,如以下: // // 摘要: // 使用指定列名称和数据类型初始化 System.Data.DataColumn 类的新实例. // // 參数 ...
- winform datagridview在添加全选checkbox时提示:不能设置 selected 或 selected 既不是表 Table 的 DataColumn 也不是 DataRelation。
在项目中,需要多选功能,于是在datagridview添加了一列DataGridViewCheckBoxColumn 在给datagridview绑定完数据集之后,对全选进行操作的时候,发现总报错,报 ...
- 在DataColumn.Expression把DateTime转换成String的问题
我在使用MySql5.1的数据库中,使用winForm的DataGridView要把数据库中全称DateTime格式,转换成Date格式,就是把日期时间转换成日期,不要时间.如‘2013-07-08 ...
- DataSet,DataTable,DataColumn,DataRow的常用操作
DataSet 这个玩意没什么好讲的,当ado.net查询出有多张表集合的数据返回时,这个时候就会使用到DataSet. DataTable //表之间直接赋值 dt2=dt1; 两者指向同一内存空间 ...
随机推荐
- NOIP2013 D1 T2火柴排队
题目描述 涵涵有两盒火柴,每盒装有 n 根火柴,每根火柴都有一个高度. 现在将每盒中的火柴各自排成一列, 同一列火柴的高度互不相同, 两列火柴之间的距离定义为: ∑(ai-bi)^2 其中 ai 表示 ...
- Can you find it? HDU - 2141 (二分查找)
Give you three sequences of numbers A, B, C, then we give you a number X. Now you need to calculate ...
- Hibernate 多对一注解
在前面学习了基于配置文件的多对一关系,而在实际的开发过程中我们更多的是使用注解去开发.在这里来简单学习一下基于注解的多对一关系. 1. 创建所需要的实体 注:这里需要特别注意的是,如果使用的是mysq ...
- 2018ECfinal J. Philosophical Balance
2018ECfinal J. Philosophical Balance 题目大意: 给出一个字符串 \(s\) ,你需要给每一个 \(i\) 一个 \([0,1]\) 之间的权值 \(k_i\) , ...
- 「ZJOI2009」多米诺骨牌
「ZJOI2009」多米诺骨牌 题目描述 有一个n × m 的矩形表格,其中有一些位置有障碍.现在要在这个表格内 放一些1 × 2 或者2 × 1 的多米诺骨牌,使得任何两个多米诺骨牌没有重叠部分,任 ...
- c# -- 解决FromsAuthentication上下文不存在
使用 FormsAuthentication.HashPasswordForStoringInConfigFile("需要加密的字符串", "MD5")这个方法 ...
- FLV视频在IIS6.0下不能播放 处理的方法
FLV视频在IIS6.0下不能播放 Flash视频由于其较高的压缩率和优越的下载速度,前景普遍看好,同时也为Flash课件增色不少.然而,在FLV视频播放中,却有两个头痛的问题 一.FLV视频在 ...
- Linux下路由表调试工具traceroute
在做静态路由表或者路由表分配时,比较直接的调试工具是traceroute,可以跟踪访问一个IP所到达的路由层级,从而知道经过哪些链路. 参考: http://man.linuxde.net/trace ...
- .NET 4.6的RyuJIT尾递归优化的Bug
今天看到园子里有一篇新闻稿.NET 4.6的RyuJIT编译器中发现严重的Bug提到,在.Net 4.6的x64程序中默认启用新的JIT程序RyuJIT在处理尾递归指令的时候有一个Bug,导致无法得到 ...
- Android Studio Beat版公布!
Android Studio Beat版公布了! 速度比0.61快爆了,有木有! L也能更新了,炫爆了,有木有!