第七周学习笔记 ADO.Net中DataTable的应用

ADO.Net中DataTable

知识点描述

DataTable是一个临时保存数据的网格虚拟表(表示内存中数据的一个表。)。DataTable是ADO dot net 库中的核心对象。它可以被应用在 VB 和 ASP 上。

当访问DataTable对象时,请注意它们是按条件区分大小写的。例如,如果一个DataTable被命名为“mydatatable”,另一个被命名为“Mydatatable”,则用于搜索其中一个表的字符串被认为是区分大小写的。但是,如果“mydatatable”存在而“Mydatatable”不存在,则认为该搜索字符串不区分大小写。一个DataSet可以包含数个DataTable对象,它们具有相同的TableName属性值和不同的Namespace属性值。

思维导图

属性

 

名称

说明

 

CaseSensitive

指示表中的字符串比较是否区分大小写。

 

ChildRelations

获取此 DataTable 的子关系的集合。

 

Columns

获取属于该表的列的集合。

 

Constraints

获取由该表维护的约束的集合。

 

Container

获取组件的容器。 (继承自 MarshalByValueComponent。)

 

DataSet

获取此表所属的 DataSet。

 

DefaultView

获取可能包括筛选视图或游标位置的表的自定义视图。

 

DesignMode

获取指示组件当前是否处于设计模式的值。 (继承自 MarshalByValueComponent。)

 

DisplayExpression

获取或设置一个表达式,该表达式返回的值用于表示用户界面中的此表。 DisplayExpression 属性用于在用户界面中显示此表的名称。

 

Events

获取附加到该组件的事件处理程序的列表。 (继承自 MarshalByValueComponent。)

 

ExtendedProperties

获取自定义用户信息的集合。

 

HasErrors

获取一个值,该值指示该表所属的 DataSet 的任何表的任何行中是否有错误。

 

IsInitialized

获取一个值,该值指示是否已初始化 DataTable。

 

Locale

获取或设置用于比较表中字符串的区域设置信息。

 

MinimumCapacity

获取或设置该表最初的起始大小。

 

Namespace

获取或设置 DataTable 中所存储数据的 XML 表示形式的命名空间。

 

ParentRelations

获取该 DataTable 的父关系的集合。

 

Prefix

获取或设置 DataTable 中所存储数据的 XML 表示形式的命名空间。

 

PrimaryKey

获取或设置充当数据表主键的列的数组。

 

RemotingFormat

获取或设置序列化格式。

 

方法

 

名称

说明

 

AcceptChanges

提交自上次调用 AcceptChanges 以来对该表进行的所有更改。

 

BeginInit

开始初始化在窗体上使用或由另一个组件使用的 DataTable。 初始化发生在运行时。

 

BeginLoadData

在加载数据时关闭通知、索引维护和约束。

 

Clear

清除所有数据的 DataTable。

 

Clone

克隆 DataTable 的结构,包括所有 DataTable 架构和约束。

 

Compute

计算用来传递筛选条件的当前行上的给定表达式。

 

Copy

复制该 DataTable 的结构和数据。

 

CreateDataReader

返回与此 DataTable 中的数据相对应的 DataTableReader。

 

CreateInstance

基础结构。创建 DataTable 的一个新实例。

 

Dispose()

释放由 MarshalByValueComponent 使用的所有资源。 (继承自 MarshalByValueComponent。)

 

Dispose(Boolean)

释放由 MarshalByValueComponent 占用的非托管资源,还可以另外再释放托管资源。 (继承自 MarshalByValueComponent。)

 

EndInit

结束在窗体上使用或由另一个组件使用的 DataTable 的初始化。 初始化发生在运行时。

 

EndLoadData

在加载数据后打开通知、索引维护和约束。

 

Equals(Object)

确定指定的对象是否等于当前对象。 (继承自 Object。)

 

DataTable 事件

 

名称

说明

 

ColumnChanged

在 DataRow 中指定的 DataColumn 的值被更改后发生。

 

ColumnChanging

在 DataRow 中指定的 DataColumn 的值发生更改时发生。

 

Disposed

添加事件处理程序以侦听组件上的 Disposed 事件。 (继承自 MarshalByValueComponent。)

 

Initialized

初始化 DataTable 后发生。

 

RowChanged

在成功更改 DataRow 之后发生。

 

RowChanging

在 DataRow 正在更改时发生。

 

RowDeleted

在表中的行已被删除后发生。

 

RowDeleting

在表中的行要被删除之前发生。

 

TableCleared

清除 DataTable 后发生。

 

TableClearing

清除 DataTable 后发生。

 

TableNewRow

插入新 DataRow 时发生。

代码

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data.SqlClient;
using System.Configuration;
 
namespace DatabaseHomework
{
    public partial class Drugs_Form : Form
    {
        private DataTable DrugsTable;
 
        private DataView DrugsViewByName;
 
        public Drugs_Form()
        {
            InitializeComponent();
        }
 
        private void btn_Read_Click(object sender, EventArgs e)
        {
            SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["Sql"].ConnectionString);
            conn.Open();
            SqlCommand cmd = new SqlCommand("select* from tb_Drugs",conn);
            SqlDataAdapter sqlDataAdapter = new SqlDataAdapter();
            sqlDataAdapter.SelectCommand = cmd;
            sqlDataAdapter.MissingSchemaAction = MissingSchemaAction.AddWithKey;
            this.DrugsTable = new DataTable();
            sqlDataAdapter.Fill(DrugsTable);
            conn.Close();           
            this.DrugsViewByName = new DataView();
            DrugsViewByName.Table = DrugsTable;
            DrugsViewByName.Sort = "Name ASC";
            dgv_Drugs.Columns.Clear();
            dgv_Drugs.DataSource = DrugsTable;
            dgv_Drugs.Columns["No"].HeaderText = "编号";
            dgv_Drugs.Columns["Name"].HeaderText = "姓名";
            dgv_Drugs.Columns["Price"].HeaderText = "单价";
            dgv_Drugs.Columns["Pinyin"].Visible = false;
            DataGridViewComboBoxColumn preCourseColumn = new DataGridViewComboBoxColumn();
            preCourseColumn.AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
            this.dgv_Drugs.Columns[this.dgv_Drugs.Columns.Count - 1].AutoSizeMode =                       
                DataGridViewAutoSizeColumnMode.Fill;
        }
 
        private void Drugs_Form_Load(object sender, EventArgs e)
        {
                                                        
            this.dgv_Drugs.AllowUserToAddRows = false;                                                     //数据网格视图不允许用户添加行;
            this.dgv_Drugs.RowHeadersVisible = false;                                                      //数据网格视图的行标题不可见;
            this.dgv_Drugs.BackgroundColor = Color.White;                                                  //数据网格视图的背景色设为白色;
            this.dgv_Drugs.AutoSizeColumnsMode =
                DataGridViewAutoSizeColumnsMode.AllCells;
        }
 
        private void txt_Pinyin_TextChanged(object sender, EventArgs e)
        {
            DataRow[] searchResultRows = this.DrugsTable.Select("Pinyin LIKE '%" + txt_Pinyin.Text.Trim() + "%'");
            DataTable searchResultTable = this.DrugsTable.Clone();
            foreach (DataRow row in searchResultRows)
            {
                searchResultTable.ImportRow(row);
            }
            dgv_Drugs.DataSource = searchResultTable;
 
        }
 
        private void btn_GNo_Click(object sender, EventArgs e)
        {
            DataRow searchResultRow = this.DrugsTable.Rows.Find(txt_GNo.Text.Trim());
            DataTable searchResultTable = DrugsTable.Clone();
            searchResultTable.ImportRow(searchResultRow);
            dgv_Drugs.DataSource = searchResultTable;
        }
 
        private void btn_GName_Click(object sender, EventArgs e)
        {
            DataRowView[] searchResultRowViews =
               this.DrugsViewByName.FindRows(txt_GName.Text.Trim());                            //借助本窗体的按名称排序的课程数据视图的方法FindRows,根据排序列(即课程名称)快速查找相应课程;由于该列并非主键,可能返回多行查询结果,故返回数据行视图数组;数据行视图数组不能直接作为数据源,需转为列表后方可作为数据源;
            DataTable searchResultTable = this.DrugsTable.Clone();                                         //借助本窗体的课程数据表的方法Clone,创建相同架构的空表,用于保存搜索结果所在数据行;
            foreach (DataRowView dataRowView in searchResultRowViews)                                       //遍历搜索结果所在数据行视图数组;
            {
                searchResultTable.ImportRow(dataRowView.Row);                                               //通过每条数据行视图的属性Row获取相应的数据行,并导入数据表;
            }
            this.dgv_Drugs.DataSource = searchResultTable;                                                 //将数据网格视图的数据源设为搜索结果数据表;
        }
    
    }
}

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值