一、思维导图
二、知识点描述
DataTable 表示一个内存内关系数据的表,可以独立创建和使用,也可以由其他 .NET Framework 对象使用,最常见的情况是作为 DataSet 的成员使用。数据库中存储的是实体表,实体表中有一系列的数据。而DataTable即存储在内存中的表,是可以独立创建和使用的。在持久化到数据库之前,是不会对数据库产生影响的,持久化到数据库可以使用dataAdapter.Update的方法(dataAdapter是某个实例化的DataAdapter对象)。
DataTable对象用来保存单个表数据,在System.Data命名空间中定义。它包含由DataCloumnCollection表示集合以及由ConstraintCollection表示的约束集合,这两个共同定义表的架构。DataTable还包含DataRowCollection所表示的行的集合,而DataRowCollection则包含表中的数据。其他使用DataTable的对象包括DataSet和DataView。
当访问DataTable对象时,请注意它们是按条件区分大小写的。例如,如果一个DataTable被命名为“mydatatable”,另一个被命名为“Mydatatable”,则用于搜索其中一个表的字符串被认为是区分大小写的。但是,如果“mydatatable”存在而“Mydatatable”不存在,则认为该搜索字符串不区分大小写。一个DataSet可以包含数个DataTable对象,它们具有相同的TableName属性值和不同的Namespace属性值。
属性 | 说明 |
---|---|
Columns | 获取属于此表的列的集合 |
Constraints | 获取由这个表维护的约束的集合 |
DataSet | 获取此表所属的DataSet |
DefaultView | 获取可能包含过滤视图的表的自定义视图 |
HasErrors | 获取指示DataSet表中的任何行中是否存在错误的值 |
MinimumCapacity | 获取或设置此表的初始起始大小 |
PrimaryKey | 获取或设置一个用作数据表主键的列数组 |
Rows | 获取属于此表的行的集合 |
TableName | 获取或设置DataTable的名称 |
CaseSensitive | 指示表中的字符串比较是否区分大小写 |
ChildRelations | 获取此DataTable的子关系的集合 |
方法 | 说明 |
---|---|
AcceptChanges() | 提交对此表进行的所有更改 |
Clear() | 清除所有数据的DataTable |
Copy() | 复制DataTable的结构和数据 |
Clone() | 克隆DataTable的结构 |
CreateDataReader() | 返回与此DataTable中的数据相对应的DataTableReader |
CreateInstance() | 创建DataTable的新实例 |
GetRowType() | 获取行类型 |
ImportRow(DataRow) | 将DataRow复制到DataTable中 |
Load(IDataReader) | 使用提供的IDataReader从数据源填充DataTable |
NewRow() | 创建一个与表具有相同模式的新DataRow |
BeginInit() | 开始初始化在窗体上使用或由另一个组件使用DataTable。初始化发生在运行时。 |
BeginLoadData() | 在加载数据时关闭通知、索引维护和约束 |
Dispose() | 释放由MarshalByValueComponent使用的所有资源 |
Reset() | 将DataTable重置为其初始状态 |
Select() | 获取DataRow对象的数组 |
WriteXml() | 使用指定的对象以XML格式写入DattaTable的当前内容 |
三、示例代码
using System.Data.SqlClient;//需要补充该代码,添加引用
/// <summary>
/// 私有字段:药品表;
/// </summary>
private DataTable MedincineTable;
this.dgv_Medincine .AllowUserToAddRows = false;
//数据网格视图不允许用户添加行;
this.dgv_Medincine.RowHeadersVisible = false;
//数据网格视图的行标题不可见;
this.dgv_Medincine.BackgroundColor = Color.White;
//数据网格视图的背景色设为白色;
this.dgv_Medincine.AutoSizeColumnsMode =
DataGridViewAutoSizeColumnsMode.AllCells;
//数据网格视图的自动调整列宽模式设为(显示)所有单元格;
//点击载入按钮后
SqlConnection sqlConnection = new SqlConnection();
//声明并实例化SQL连接;
sqlConnection.ConnectionString =
"Server=(local);Database=ResidentEduBase;Integrated Security=sspi";
//在字符串变量中,描述连接字符串所需的服务器地址、数据库名称、集成安全性(即是否使用Windows验证);
SqlCommand sqlCommand = new SqlCommand();
//声明并实例化SQL命令;
sqlCommand.Connection = sqlConnection;
//将SQL命令的连接属性指向SQL连接;
SqlDataAdapter sqlDataAdapter = new SqlDataAdapter();
//声明并实例化SQL数据适配器;
sqlDataAdapter.SelectCommand = sqlCommand;
//将SQL数据适配器的查询命令属性指向SQL命令;
DataTable medincineTable = new DataTable();
//声明并实例化数据表,用于保存所有药品,以用作数据网格视图的数据源;
sqlConnection.Open();
//打开SQL连接;
sqlCommand.CommandText = "SELECT * FROM tb_Medincine;";
//指定SQL命令的命令文本;该命令查询所有药品;
sqlDataAdapter.Fill(medincineTable);
//SQL数据适配器读取数据,并填充药品数据表;
sqlConnection.Close();
//关闭SQL连接;
this.MedincineTable = medincineTable;
//将药品表赋予本窗体的相应私有字段,便于其它方法访问;
this.dgv_Medincine.Columns.Clear();
//数据网格视图的列集合清空;
this.dgv_Medincine.DataSource = medincineTable;
//将数据网格视图的数据源设为药品数据表;
this.dgv_Medincine.Columns["No"].HeaderText = "编号";
//将数据网格视图的指定列的表头文本设为中文;
this.dgv_Medincine.Columns["Name"].HeaderText = "名称";
this.dgv_Medincine.Columns["Method"].HeaderText = "用法";
this.dgv_Medincine.Columns["Amount"].HeaderText = "数量";
this.dgv_Medincine.Columns[this.dgv_Medincine.Columns.Count - 2].AutoSizeMode = //数据网格视图的倒数第2列(即照片列)的自动调整列宽模式设为填充(至数据网格视图右侧边缘);
DataGridViewAutoSizeColumnMode.Fill;
四、效果截图