Visual 2015 如何在前端界面操作数据表

时间:2021-09-06 14:10:41

思维导图:

1、下拉框思维导图:

Visual 2015 如何在前端界面操作数据表

2、搜索思维导图:

Visual 2015 如何在前端界面操作数据表

本篇文章主要讲的是如何在前端界面操作数据表,以及代码和运行结果的展示。

此次的重点有三个方面,包括在表格中展示下拉框效果、按拼音首字母查询、通过Excel将数据导入的方法。

添加如下控件:

Visual 2015 如何在前端界面操作数据表

一、数据库在前端显示的表格中展示下拉框效果

①    先连接数据库,填充数据表。

②    借助本窗体的医生表的方法Copy来复制数据表,并赋予本窗体的科室数据表,用作科室下拉框的数据源;

③    设置医生数据视图对应的数据表;

④    声明并实例化数据网格视图下拉框列

⑤    将数据网格视图的原本表中的科室列设为不可见

⑥    设置下拉框列的名称、表头文本。

⑦    设置下拉框列数据源为科室表【DataSource】、显示成员为(科室数据表的)名称(列)【DisplayMember】、值成员为(科室表的)编号(列)【ValueMember】、数据属性名称为(医生表的)科室编号(列)【DataPropertyName】

⑧    设置下拉框列在表中的显示顺序【DisplayIndex】、自动调整列宽模式为填充【AutoSizeMode】

⑨    将下拉框列加入数据网格视图的列集合

private void btn_Load_Click(object sender, EventArgs e)
        {
            SqlConnection sqlConnection = new SqlConnection();                                              //声明并实例化SQL连接;
            sqlConnection.ConnectionString =
                "Server=(local);Database=EduBaseDemo;Integrated Security=sspi";                             //在字符串变量中,描述连接字符串所需的服务器地址、数据库名称、集成安全性(即是否使用Windows验证);
            SqlCommand sqlCommand = new SqlCommand();                                                       //声明并实例化SQL命令;
            sqlCommand.Connection = sqlConnection;                                                          //将SQL命令的连接属性指向SQL连接;
            sqlCommand.CommandText = "SELECT * FROM tb_Doctor;";                                            //指定SQL命令的命令文本;该命令查询所有课程,以用作数据网格视图数据源;
            SqlDataAdapter sqlDataAdapter = new SqlDataAdapter();                                           //声明并实例化SQL数据适配器;
            sqlDataAdapter.SelectCommand = sqlCommand;                                                      //将SQL数据适配器的查询命令属性指向SQL命令;
            sqlDataAdapter.MissingSchemaAction = MissingSchemaAction.AddWithKey;                            //设置SQL数据适配器在缺少架构时的动作为追加主键,从而获取数据库中定义的主键;
            this.DoctorTable = new DataTable();                                                             //实例化本窗体的课程数据表,用于保存所有课程,以用作数据网格视图数据源;
            sqlConnection.Open();                                                                           //打开SQL连接;
            sqlDataAdapter.Fill(this.DoctorTable);                                                          //SQL数据适配器读取数据,并填充课程数据表;
            sqlConnection.Close();                                                                          //关闭SQL连接;                                                
            this.DoctorViewByName = new DataView();                                                         //实例化本窗体的课程数据视图,用于按照名称进行快速查询;
            this.DoctorViewByName.Table = this.DoctorTable;                                                 //设置课程数据视图对应的数据表;
            this.DoctorViewByName.Sort = "Name ASC";                                                        //设置课程数据视图的排序条件,即查询所覆盖的列;
            this.dgv_Doctor.Columns.Clear();                                                                //数据网格视图的列集合清空;
            this.dgv_Doctor.DataSource = this.DoctorTable;                                                  //将数据网格视图的数据源设为学生数据表;
            this.dgv_Doctor.Columns["DOCID"].HeaderText = "编号";                                              //将数据网格视图的指定列的表头文本设为中文;
            this.dgv_Doctor.Columns["DOCName"].HeaderText = "姓名";
            this.dgv_Doctor.Columns["KSID"].HeaderText = "科室";
            this.dgv_Doctor.Columns["Sex"].HeaderText = "性别";
            this.dgv_Doctor.Columns["Birthday"].HeaderText = "生日";
            this.dgv_Doctor.Columns["Pinyin"].Visible = false;                                              //将数据网格视图的指定列设为不可见;
            this.dgv_Doctor.Columns[this.dgv_Doctor.Columns.Count - 1].AutoSizeMode =                       //数据网格视图的最后一列的自动调整列宽模式设为填充(至数据网格视图右侧边缘);
                DataGridViewAutoSizeColumnMode.Fill;
            DataGridViewComboBoxColumn KeShi = new DataGridViewComboBoxColumn();                  //声明并实例化数据网格视图下拉框列,用于设置先修课程;
            KeShi.Name = "KeShi";                                                             //设置下拉框列的名称;
            KeShi.HeaderText = "科室";                                                        //设置下拉框列的表头文本;
            KeShi.DataSource = this.KeShiTable;                                               //设置下拉框列的数据源为先修课程数据表;
            KeShi.DisplayMember = "KSName";                                                         //设置下拉框列的显示成员为(先修课程数据表的)名称(列);
            KeShi.ValueMember = "KSID";                                                             //设置下拉框列的值成员为(先修课程数据表的)编号(列);
            KeShi.DataPropertyName = "KSID";                                               //设置下拉框列的数据属性名称为(课程数据表的)先修课程编号(列);
            KeShi.DisplayIndex = 3;                                                               //设置下拉框列的显示顺序;
            KeShiColumn.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;                             //设置下拉框列的自动调整列宽模式为填充;
            this.dgv_KeShi.Columns.Add(KeShiColumn);                                                   //将下拉框列加入数据网格视图的列集合;
        }

  

二、前端进行按条件查询

 

先将数据载入表格:

namespace 手术麻醉管理系统
{
public partial class fm_医生信息 : Form
{
private DataTable DocterTable;
private DataTable KeshiTable;
private DataView DocterViewByName;
public fm_医生信息()
{
InitializeComponent();
}

private void fm_医生信息_Load(object sender, EventArgs e)
{
SqlConnection sqlConnection = new SqlConnection(); //声明并实例化SQL连接;
sqlConnection.ConnectionString =
"Server=DESKTOP-VKS7HLB;Database=手术麻醉系统;Integrated Security=sspi"; //在字符串变量中,描述连接字符串所需的服务器地址、数据库名称、集成安全性(即是否使用Windows验证);
SqlCommand sqlCommand = new SqlCommand(); //声明并实例化SQL命令;
SqlCommand sqlCommand2 = new SqlCommand(); //声明并实例化SQL命令;
sqlCommand.Connection = sqlConnection; //将SQL命令的连接属性指向SQL连接;
sqlCommand2.Connection = sqlConnection; //将SQL命令的连接属性指向SQL连接;
sqlCommand.CommandText = "SELECT * FROM tb_KeShi;"; //指定SQL命令的命令文本;该命令查询所有班级,以用作下拉框数据源;
sqlCommand2.CommandText = "SELECT * FROM tb_Docter;"; //指定SQL命令的命令文本;该命令查询所有学生;
SqlDataAdapter sqlDataAdapter = new SqlDataAdapter(); //声明并实例化SQL数据适配器;
sqlDataAdapter.SelectCommand = sqlCommand; //将SQL数据适配器的查询命令属性指向SQL命令;
this.KeshiTable = new DataTable(); //声明并实例化数据表,用于保存所有班级,以用作下拉框数据源;
SqlDataAdapter sqlDataAdapter2 = new SqlDataAdapter(); //声明并实例化SQL数据适配器;
sqlDataAdapter2.SelectCommand = sqlCommand2;
sqlDataAdapter2.MissingSchemaAction = MissingSchemaAction.AddWithKey; //设置SQL数据适配器在缺少架构时的动作为追加主键,从而获取数据库中定义的主键;//将SQL数据适配器的查询命令属性指向SQL命令; //将SQL数据适配器的查询命令属性指向SQL命令;
this.DocterTable = new DataTable(); //声明并实例化数据表,用于保存所有学生,以用作数据网格视图的数据源;
sqlConnection.Open(); //打开SQL连接;
sqlDataAdapter.Fill(KeshiTable); //SQL数据适配器读取数据,并填充班级数据表;
sqlDataAdapter2.Fill(DocterTable); //SQL数据适配器读取数据,并填充学生数据表;
sqlConnection.Close();
this.DocterViewByName = new DataView(); //实例化本窗体的课程数据视图,用于按照名称进行快速查询;
this.DocterViewByName.Table = this.DocterTable; //设置课程数据视图对应的数据表;
this.DocterViewByName.Sort = "Name ASC"; //关闭SQL连接;
this.dgv_Score.Columns.Clear(); //数据网格视图的列集合清空;
this.dgv_Score.DataSource = DocterTable; //将数据网格视图的数据源设为学生数据表;
this.dgv_Score.Columns["DOCID"].HeaderText = "医生编号"; //将数据网格视图的指定列的表头文本设为中文;
this.dgv_Score.Columns["DOCName"].HeaderText = "姓名";
this.dgv_Score.Columns["KSID"].HeaderText = "科室编码";
this.dgv_Score.Columns["KSID"].Visible = false; //将数据网格视图的指定列设为不可见;
this.dgv_Score.Columns[this.dgv_Score.Columns.Count - 1].AutoSizeMode = //数据网格视图的最后一列的自动调整列宽模式设为填充(至数据网格视图右侧边缘);
DataGridViewAutoSizeColumnMode.Fill;
DataGridViewComboBoxColumn KeshiColumn = new DataGridViewComboBoxColumn(); //声明并实例化数据网格视图下拉框列,用于设置学生的班级;
KeshiColumn.Name = "Keshi"; //设置下拉框列的名称;
KeshiColumn.HeaderText = "科室"; //设置下拉框列的表头文本;
KeshiColumn.DataSource = KeshiTable; //设置下拉框列的数据源为班级数据表;
KeshiColumn.DisplayMember = "KSName"; //设置下拉框列的显示成员为(班级数据表的)名称(列);
KeshiColumn.ValueMember = "KSID"; //设置下拉框列的值成员为(班级数据表的)编号(列);
KeshiColumn.DataPropertyName = "KSID"; //设置下拉框列的数据属性名称为(学生数据表的)班级编号(列);
KeshiColumn.DisplayIndex = 4; //设置下拉框列的显示顺序;
KeshiColumn.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill; //设置下拉框列的自动调整列宽模式为填充;
this.dgv_Score.Columns.Add(KeshiColumn);
}

(1)按拼音首字母查询

①    首先要在医生表中准备各个医生拼音首字母缩写,并将数据网格视图的表中的拼音列设为不可见

②    借助本窗体的医生数据表的方法Select,并提供与SQL类似的谓词表达式作为查询条件,根据拼音缩写进行模糊查询(仅支持%通配符);查询将返回数据行数组;

③    借助本窗体的课程数据表的方法Clone,创建相同架构的空表,用于保存搜索结果所在数据行;

④    遍历搜索结果所在数据行数组;

⑤    数据行导入数据表;

⑥    将数据网格视图的数据源设为搜索结果数据表;

DataRow[] searchResultRows =
                this.DocterTable.Select("PinYin LIKE '%" + this.tb_拼音 .Text.Trim() + "%'");             //借助本窗体的课程数据表的方法Select,并提供与SQL类似的谓词表达式作为查询条件,根据拼音缩写进行模糊查询(仅支持%通配符);查询将返回数据行数组;
            DataTable searchResultTable = this.DocterTable.Clone();                                         //借助本窗体的课程数据表的方法Clone,创建相同架构的空表,用于保存搜索结果所在数据行;
            foreach (DataRow row in searchResultRows)                                                       //遍历搜索结果所在数据行数组;
            {
                searchResultTable.ImportRow(row);                                                           //数据行导入数据表;
            }
            this.dgv_Score .DataSource = searchResultTable;

 

(2)按编号查询

①设置SQL数据适配器在缺少架构时的动作为追加主键,从而获取数据库中定义的主键;

②借助本窗体的医生数据表的行集合的方法Find,根据主键值(即医生编号)快速查找相应医生,并返回其所在的数据行;但数据行不能作为数据源,需另行创建数据表,并导入该数据行,最后将数据表作为数据源;

③借助本窗体的医生数据表的方法Clone,创建相同架构的空表,用于保存搜索结果所在数据行;

④将(复制后的)数据行导入数据表;

⑤将数据网格视图的数据源设为搜索结果数据表;

DataRow searchResultRow = this.DocterTable.Rows.Find(this.tb_编码.Text.Trim());            //借助本窗体的课程数据表的行集合的方法Find,根据主键值(即课程编号)快速查找相应课程,并返回其所在的数据行;但数据行不能作为数据源,需另行创建数据表,并导入该数据行,最后将数据表作为数据源;
            DataTable searchResultTable = this.DocterTable.Clone();                                         //借助本窗体的课程数据表的方法Clone,创建相同架构的空表,用于保存搜索结果所在数据行;
            searchResultTable.ImportRow(searchResultRow);                                                   //将(复制后的)数据行导入数据表;
            this.dgv_Score.DataSource = searchResultTable;

 

(3)按姓名查询

①设置医生数据视图的排序条件,即查询所覆盖的列(姓名);

②借助本窗体的按名称排序的课程数据视图的方法FindRows,根据排序列(即医生名称)快速查找相应课程;由于该列并非主键,可能返回多行查询结果,故返回数据行视图数组;数据行视图数组不能直接作为数据源,需转为列表后方可作为数据源;

③借助本窗体的课程数据表的方法Clone,创建相同架构的空表,用于保存搜索结果所在数据行;

④    遍历搜索结果所在数据行数组;

⑤    数据行导入数据表;

⑥    将数据网格视图的数据源设为搜索结果数据表; 

DataRowView[] searchResultRowViews =
                this.DocterViewByName.FindRows(this.tb_姓名 .Text.Trim());                            //借助本窗体的按名称排序的课程数据视图的方法FindRows,根据排序列(即课程名称)快速查找相应课程;由于该列并非主键,可能返回多行查询结果,故返回数据行视图数组;数据行视图数组不能直接作为数据源,需转为列表后方可作为数据源;
            DataTable searchResultTable = this.DocterTable.Clone();                                         //借助本窗体的课程数据表的方法Clone,创建相同架构的空表,用于保存搜索结果所在数据行;
            foreach (DataRowView dataRowView1 in searchResultRowViews)                                      //遍历搜索结果所在数据行视图数组;
            {
                searchResultTable.ImportRow(dataRowView1.Row);                                              //通过每条数据行视图的属性Row获取相应的数据行,并导入数据表;
            }
            this.dgv_Score .DataSource = searchResultTable;

 

三、介绍一个通过Excel将数据导入的方法

①    将保存有数据的Excel表另存为.csv格式(此为逗号分隔格式)

②    在数据中执行代码:

BULK INSERT tb_Course

     FROM 'C:\Course.csv'

     WITH

            (FIELDTERMINATOR=','

            ,ROWTERMINATOR='\n'

            ,FIRSTROW=2);