第七周学习笔记之如何在前端界面操作数据表

一、知识点描述以及相应代码(相关知识要点在代码段注释中体现)
DataGridView控件(数据网格视图)
使用 DataGridView 控件,可以显示和编辑来自多种不同类型的数据源的表格数据。将数据绑定到 DataGridView 控件非常简单和直观,在大多数情况下,只需设置 DataSource 属性即可。在绑定到包含多个列表或表的数据源时,只需将 DataMember 属性设置为指定要绑定的列表或表的字符串即可。利用DataGridView控件我们可以方便地在前端界面操作数据表。
1.DataGridView控件外观设置

 this.dgv_Drug.AllowUserToAddRows = false;     //数据网格视图不允许用户添加行;
            this.dgv_Drug.RowHeadersVisible = false;   //数据网格视图的行标题不可见;
            this.dgv_Drug.BackgroundColor = Color.White;  //数据网格视图的背景色设为白色;
          this.dgv_Drug.AutoSizeColumnsMode =
              DataGridViewAutoSizeColumnsMode.AllCells;   //数据网格视图的自动调整列宽模式设为显示所有单元格;

2.DataGridView控件连接数据库以及修改表格显示状态

SqlConnection sqlConnection = new SqlConnection();
            sqlConnection.ConnectionString =
                ConfigurationManager.ConnectionStrings["Sql"].ConnectionString;
            SqlCommand sqlCommand = new SqlCommand();
            sqlCommand.Connection = sqlConnection;
            sqlCommand.CommandText = "SELECT * FROM tb_Drug;"; 
            SqlDataAdapter sqlDataAdapter = new SqlDataAdapter(); //声明并实例化SQL数据适配器;
            sqlDataAdapter.SelectCommand = sqlCommand;  //将SQL数据适配器的查询命令属性指向SQL命令;
            sqlDataAdapter.MissingSchemaAction = MissingSchemaAction.AddWithKey; //设置SQL数据适配器在缺少架构时的动作为追加主键,从而获取数据库中定义的主键;
            this.DrugTable = new DataTable(); //实例化本窗体的药品数据表,用于保存所有课程,以用作数据网格视图数据源;
            sqlConnection.Open();    //打开SQL连接;
            sqlDataAdapter.Fill(this.DrugTable);    //SQL数据适配器读取数据,并填充药品表;
            sqlConnection.Close();                                           
            this.DrugViewByName = new DataView();      //实例化本窗体的药品数据视图,用于按照名称进行快速查询;
            this.DrugViewByName.Table = this.DrugTable;      //设置药品数据视图对应的数据表;
            this.DrugViewByName.Sort = "Name ASC";      //设置药品数据视图的排序条件,即查询所覆盖的列;
            this.dgv_Drug.Columns.Clear();   //数据网格视图的列集合清空;
            this.dgv_Drug.DataSource = this.DrugTable;     //将数据网格视图的数据源设为药品数据表;
            this.dgv_Drug.Columns["No"].Visible =false ;    //将数据网格视图的指定列的表头文本设为中文;
            this.dgv_Drug.Columns["Code"].Visible = false;
            this.dgv_Drug.Columns["Name"].HeaderText = "名称";
            this.dgv_Drug.Columns["CommonName"].HeaderText = "俗名";
            this.dgv_Drug.Columns["TypeNo"].Visible = false;
            this.dgv_Drug.Columns["ApprovalNo"].Visible = false;
            this.dgv_Drug.Columns["IsEthicals"].HeaderText = "是否处方药(选中为处方药)";
            this.dgv_Drug.Columns["Produce"].Visible = false;
            this.dgv_Drug.Columns["Validity"].Visible = false;
            this.dgv_Drug.Columns["Purchasing"].HeaderText = "进价";
            this.dgv_Drug.Columns["RetailPrice"].HeaderText = "零售价";
            this.dgv_Drug.Columns["SupplierNo"].Visible = false;
            this.dgv_Drug.Columns["Situation"].HeaderText = "库存量";
            this.dgv_Drug.Columns["SupplierNo"].Visible = false;
            this.dgv_Drug.Columns["Indate"].Visible = false;
            this.dgv_Drug.Columns[this.dgv_Drug.Columns.Count - 1].AutoSizeMode =     
                DataGridViewAutoSizeColumnMode.Fill;  //数据网格视图的最后一列的自动调整列宽模式设为填充(至数据网格视图右侧边缘);

3.DataGridView控件中显示下拉框

SqlCommand sqlCommand1 = new SqlCommand();
            sqlCommand1.CommandText = "SELECT * FROM tb_Supplier;";
            sqlCommand1.Connection = sqlConnection;
            SqlDataAdapter sqlDataAdapter1 = new SqlDataAdapter();
            sqlDataAdapter1.SelectCommand = sqlCommand1;
            sqlDataAdapter1.MissingSchemaAction = MissingSchemaAction.AddWithKey;
            this.SupplierTable = new DataTable();
            sqlConnection.Open();
            sqlDataAdapter1.Fill(SupplierTable);
            sqlConnection.Close();
            DataGridViewComboBoxColumn cmb_supplier = new DataGridViewComboBoxColumn(); //声明并实例化数据网格视图下拉框列,用于设置供应商
            cmb_supplier.HeaderText = "供应商";//设置下拉框列的表头文本;
            cmb_supplier.Name = "Supplier";//设置下拉框列的名称;
            cmb_supplier.DataSource = SupplierTable;  //将供应商下拉框的数据源设为供应商数据表;
            cmb_supplier.DisplayMember = "Name";   //将供应商下拉框的显示成员设为供应商数据表的名称列;
            cmb_supplier.ValueMember = "No";//设置下拉框列的值成员为(供应商数据表的)编号(列);
            cmb_supplier.DisplayIndex = 11;//设置下拉框列的显示顺序;
            cmb_supplier.DataPropertyName = "SupplierNo";//设置下拉框列的数据属性名称为(药品数据表的)供应商编号(列);
            this.dgv_Drug.Columns.Add(cmb_supplier); //将下拉框列加入数据网格视图的列集合;

4.利用DataGridView控件在前端界面实现更新数据表

 private void btn_Update_Click(object sender, EventArgs e)
        {
            SqlConnection sqlConnection = new SqlConnection();
            sqlConnection.ConnectionString =
                ConfigurationManager.ConnectionStrings["Sql"].ConnectionString;
            SqlCommand sqlCommand = new SqlCommand();
            sqlCommand.Connection = sqlConnection;
            sqlCommand.CommandText =                                                                        //指定SQL命令的命令文本;
               "UPDATE tb_Drug"
               + " SET Name=@Name,CommonName=@CommonName,IsEthicals=@IsEthicals,SupplierNo=@SupplierNo,Purchasing=@Purchasing,RetailPrice=@RetailPrice,Situation=@Situation"
               + " WHERE No=@No;";
            sqlCommand.Parameters.Add("@Name", SqlDbType.VarChar, 0, "Name");                                  //向SQL命令的参数集合添加参数的名称、SQL Server数据类型、长度(仅用于定长类型)、所绑定的数据表中的列名;
            sqlCommand.Parameters.Add("@CommonName", SqlDbType.VarChar, 0, "CommonName");
            sqlCommand.Parameters.Add("@IsEthicals", SqlDbType.Bit, 0, "IsEthicals");
            sqlCommand.Parameters.Add("@SupplierNo", SqlDbType.Int, 0, "SupplierNo");
            sqlCommand.Parameters.Add("@Purchasing", SqlDbType.VarChar, 0, "Purchasing");
            sqlCommand.Parameters.Add("@RetailPrice", SqlDbType.VarChar, 0, "RetailPrice");
            sqlCommand.Parameters.Add("@Situation", SqlDbType.VarChar, 0, "Situation");
            sqlCommand.Parameters.Add("@No", SqlDbType.Char, 7, "No");
            SqlDataAdapter sqlDataAdapter = new SqlDataAdapter();                                           //声明并实例化SQL数据适配器,同时借助构造函数,将其SelectCommand属性设为先前创建的SQL命令;
            sqlDataAdapter.UpdateCommand = sqlCommand;                                                      //将SQL数据适配器的更新命令属性指向SQL命令;
            DataTable studentTable = (DataTable)this.dgv_Drug.DataSource;                                  //声明数据表,并指向数据网格视图的数据源;数据源默认类型为object,还需强制转换类型;
            sqlConnection.Open();                                                                           //打开SQL连接;
            int rowAffected = sqlDataAdapter.Update(studentTable);                                          //SQL数据适配器根据学生数据表提交更新,并返回受影响行数;
            sqlConnection.Close();                                                                          //关闭SQL连接;
            MessageBox.Show("更新" + rowAffected.ToString() + "行。");                                      //在消息框显示受影响行数;

        }

5.在DataGridView控件显示查询结果

 private void btn_SearchByName_Click(object sender, EventArgs e)
        {
            DataRow[] searchResultRows =
                  this.DrugTable.Select("Name LIKE '%" + this.txb_DrugName.Text.Trim() + "%'");   //借助本窗体的药品数据表的方法Select,并提供与SQL类似的谓词表达式作为查询条件,根据名称中的个别字进行模糊查询(仅支持%通配符);查询将返回数据行数组;
            DataTable searchResultTable = this.DrugTable.Clone();    //借助本窗体的药品数据表的方法Clone,创建相同架构的空表,用于保存搜索结果所在数据行;
            foreach (DataRow row in searchResultRows)  //遍历搜索结果所在数据行数组;
            {
                searchResultTable.ImportRow(row);            //数据行导入数据表;
            }
            this.dgv_Drug.DataSource = searchResultTable;     //将数据网格视图的数据源设为搜索结果数据表;
        }

二、运行结果示例
点击载入前:
第七周学习笔记之如何在前端界面操作数据表_第1张图片
点击载入后:
第七周学习笔记之如何在前端界面操作数据表_第2张图片
在检索框输入“牛黄“,点击根据名称检索,可以实现模糊检索:
第七周学习笔记之如何在前端界面操作数据表_第3张图片
点击更新前:
第七周学习笔记之如何在前端界面操作数据表_第4张图片
我们对“牛黄解毒片”的零售价、是否为处方药以及供应商直接在数据表中进行更改,然后点击更新:
第七周学习笔记之如何在前端界面操作数据表_第5张图片
第七周学习笔记之如何在前端界面操作数据表_第6张图片
三、思维导图
第七周学习笔记之如何在前端界面操作数据表_第7张图片

你可能感兴趣的:(第七周学习笔记之如何在前端界面操作数据表)