【第6周学习笔记】如何在各类控件中输入\输出数据

这篇博客介绍了Windows应用中常见的控件,如ComboBox、TextBox、RadioButton、DateTimePicker、PictureBox和DataGridView的数据输入和输出方法。通过实例代码展示了如何在这些控件中写入和读取数据,并与数据库进行交互,包括添加、修改和查询操作。
摘要由CSDN通过智能技术生成

一、知识点描述

1.下拉框(ComboBox)

显示一个可编辑的文本框,其中包含一个允许值下拉列表。

2.文本框(TextBox)

允许用户输入文本,并提供多行编辑和密码字符掩码功能。

3.单选按钮(RadioButton)

当与其他单选按钮成对出现时,允许用户从一组选项中选择单个选项。

4.日期控件(DateTimePicker)

允许用户选择日期和时间,并以指定的格式显示该日期和时间。

5.图像框(PictureBox)

指定支持事务处理初始化,允许用户加载图片。

6.网格视图(DataGridView)

是一类图形控件用来网格方式显示数据。

二、思维导图

三、实例代码与效果截图

1.输入数据

①下拉框(ComboBox)

下拉框中可以写入数据,并选择,如下图:

this.Patient.IfChronic = this.cmb_IfChronic.Text.Trim();

②文本框(TextBox)

文本框中直接输入值,如下图:

向SQL命令的参数集合添加参数的名称、值(即文本框中的值);

sqlCommand.Parameters.AddWithValue("@No", this.txb_No.Text.Trim()); //输入文本框数据(账号) 
sqlCommand2.Parameters.AddWithValue("@Password", this.txb_Password.Text.Trim()); //输入文本框数据(密码)                 

调用SQL命令的方法ExecuteNonQuery来执行命令,向数据库写入数据,并返回受影响行数; 

int rowAffected = sqlCommand.ExecuteNonQuery();                                               
sqlConnection.Close();

③单选按钮(RadioButton)

选中单选按钮,如下图:

向SQL命令的参数集合添加参数的名称、值;

sqlCommand.Parameters.AddWithValue("@Gender", this.rdb_Female.Checked);//输入单选按钮的值

调用SQL命令的方法ExecuteNonQuery来执行命令,向数据库写入数据,并返回受影响行数; 

int rowAffected = sqlCommand.ExecuteNonQuery();                                               
sqlConnection.Close();

④日期控件(DateTimePicker) 

选中日期控件中的一个日期,如下图:

向SQL命令的参数集合添加参数的名称、值;

sqlCommand.Parameters.AddWithValue("@BirthDate", this.DateTimePicker1.Value);//输入日期控件中的数据

调用SQL命令的方法ExecuteNonQuery来执行命令,向数据库写入数据,并返回受影响行数; 

int rowAffected = sqlCommand.ExecuteNonQuery();                                               
sqlConnection.Close();

⑤图像框(PictureBox)

点击打开图片按钮,如下图:

然后选择一张图片,如下图:

然后点击打开,读取这张图片,如下图: 

打开图片按钮代码如下:

 

        private void btn_OpenPhoto_Click(object sender, EventArgs e)
        {
            OpenFileDialog openPhotoDialog = new OpenFileDialog()                                           //声明并实例化打开文件对话框;
            {                                                                                           //在初始化器中,设置打开文件对话框的各属性;
                Title = "打开照片文件"                                                      //对话框标题;
                ,
                Filter = "BMP Files (*.bmp)|*.bmp"                                                    //文件格式过滤器;
                ,
                InitialDirectory = @"C:\"                                                             //初始目录;
            };
            if (openPhotoDialog.ShowDialog() == DialogResult.OK)                                            //显示打开文件对话框,若打开文件对话框的对话结果为点击OK键;
            {
                this.PhotoFileName = openPhotoDialog.FileName;                                              //将对话框获得的文件名,存入本窗体的私有字段中;
                this.ptb_Photo.Image = Image.FromFile(this.PhotoFileName);                                  //调用图像的静态方法FromFile从指定文件中读取图像,并赋予图像框;
            }
        }

点击保存按钮,存入数据,代码如下:

       private void btn_Yes_Click(object sender, EventArgs e)
        {
            MemoryStream memoryStream = new MemoryStream();                                                 //声明并实例化内存流,用于读取照片的字节数据;
            this.ptb_Photo.Image.Save(memoryStream, ImageFormat.Bmp);                       //调用图像框的图像的静态方法Save,将图像保存至内存流;
            byte[] photoBytes = new byte[memoryStream.Length];                                              //声明并实例化字节数组,用于保存照片数据;数组长度对应内存流长度;
            memoryStream.Seek(0, SeekOrigin.Begin);                                                         //保存后的内存流的偏移位置在末尾,需通过查找来将偏移位置设为起始;
            memoryStream.Read(photoBytes, 0, photoBytes.Length);                                            //将内存流读入字节数组;

            this.Patient.P_Photo = photoBytes;


            PatientBll.SignUp(this.Patient);                                                          //调用业务逻辑层的静态方法,对用户执行注册操作;       
            MessageBox.Show(this.Patient.Message);                                                 //在消息框中显示注册消息;
        }
   

 

2.输出数据

①下拉框(ComboBox)

(1)构建存储数据的数据表(DataTable)

DataTable dataTable = new DataTable(); //声明并实例化数据表,用于保存数据,以用作下拉框数据源;

(2)构造数据适配器(SqlDataAdapter)

首先,声明并实例化SQL数据适配器,同时借助构造函数,将其SelectCommand属性设为先前创建的SQL命令
其次,将SQL数据适配器的查询命令属性指向SQL命令

SqlDataAdapter sqlDataAdapter = new SqlDataAdapter();
sqlDataAdapter.SelectCommand = sqlCommand;  
sqlDataAdapter.Fill(dataTable);//SQL数据适配器读取数据,并填充班级数据表;  

(3)设置Combobox数据源及基本配置

DisplayMember:配置Combobox的显示成员
ValueMember:配置Combobox的值成员

this.Combobox1.DataSource = dataTable;//将下拉框Combobox1的数据源设为班级数据表;
this.Combobox1.DisplayMember = "Name";//将下拉框的显示成员设为数据表的名称列;
this.Combobox1.ValueMember = "No"; //将下拉框的值成员设为班级数据表的编号列;   

 

②文本框(TextBox)

(1)构建存储数据的数据表

调用SQL命令的方法ExecuteReader来执行命令,并获取数据阅读器;

(2)读取数据记录

在数据阅读器的索引器中指定列名,从而访问当前记录的指定列的值,并赋予TextBox;
【注意】将读取的数据类型转化为string类型(用.ToString)

具体代码如下:

       /// <summary>
        /// 公有方法:构造函数;
        /// </summary>
        public frm_StudentInfo()
        {
            InitializeComponent();
            this.StartPosition = FormStartPosition.CenterScreen;                                            //本窗体启动位置设为屏幕中央; 
        }

        /// <summary>
        /// 私有方法:点击载入按钮;
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btn_Load_Click(object sender, EventArgs e)
        {
            SqlConnection sqlConnection = new SqlConnection();                                              //声明并实例化SQL连接;
            sqlConnection.ConnectionString =
                "Server=(local);Database=EduBase10;Integrated Security=sspi";                             //在字符串变量中,描述连接字符串所需的服务器地址、数据库名称、集成安全性(即是否使用Windows验证);
            SqlCommand sqlCommand = new SqlCommand();                                                       //声明并实例化SQL命令;
            sqlCommand.Connection = sqlConnection;                                                          //将SQL命令的连接属性指向SQL连接;
            sqlCommand.CommandText = "SELECT * FROM tb_Student WHERE No=@No;";                              //指定SQL命令的命令文本;
            sqlCommand.Parameters.AddWithValue("@No", "3120707001");                                        //向SQL命令的参数集合添加参数的名称、值;
            sqlConnection.Open();                                                                           //打开SQL连接;
            SqlDataReader sqlDataReader = sqlCommand.ExecuteReader();                                       //调用SQL命令的方法ExecuteReader来执行命令,并获取数据阅读器;
            if (sqlDataReader.Read())                                                                       //若数据阅读器成功读取到下一条记录(首次查询则表示第一条记录);
            {
                this.txb_No.Text = sqlDataReader["No"].ToString();                                          //在数据阅读器的索引器中指定列名,从而访问当前记录的指定列的值,并赋予相应控件;
                this.txb_Name.Text = sqlDataReader["Name"].ToString();
                this.txb_Gender.Text = sqlDataReader["Gender"].ToString();
                this.txb_BirthDate.Text = ((DateTime)sqlDataReader["BirthDate"]).ToShortDateString();       //生日首先转换为日期时间类型,再调用ToShortDateString方法获取日期部分;
                this.txb_Class.Text = sqlDataReader["Class"].ToString();
                this.txb_Speciality.Text = sqlDataReader["Speciality"].ToString();
            }
            sqlDataReader.Close();                                                                          //关闭数据阅读器(同时关闭连接);
        }

截图如下: 

③单选按钮(RadioButton)

【注意】将读取的数据转化为布尔类型

具体代码如下:

        /// <summary>
        /// 私有方法:点击载入按钮;
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btn_Load_Click(object sender, EventArgs e)
        {
            SqlConnection sqlConnection = new SqlConnection();                                              //声明并实例化SQL连接;
            sqlConnection.ConnectionString =
                "Server=(local);Database=EduBase10;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_Class;";                                             //指定SQL命令的命令文本;该命令查询所有班级,以用作下拉框数据源;
            sqlCommand2.CommandText = "SELECT * FROM tb_Student WHERE No=@No;";                             //指定SQL命令的命令文本;该命令查询指定学生;
            sqlCommand2.Parameters.AddWithValue("@No", "3170707010");                                       //向SQL命令的参数集合添加参数的名称、值;
            SqlDataAdapter sqlDataAdapter = new SqlDataAdapter();                                           //声明并实例化SQL数据适配器,同时借助构造函数,将其SelectCommand属性设为先前创建的SQL命令;
            sqlDataAdapter.SelectCommand = sqlCommand;                                                      //将SQL数据适配器的查询命令属性指向SQL命令;
            DataTable classTable = new DataTable();                                                         //声明并实例化数据表,用于保存所有班级,以用作下拉框数据源;
            sqlConnection.Open();                                                                           //打开SQL连接;
            sqlDataAdapter.Fill(classTable);                                                                //SQL数据适配器读取数据,并填充班级数据表;
            this.cmb_Class.DataSource = classTable;                                                         //将班级下拉框的数据源设为班级数据表;
            this.cmb_Class.DisplayMember = "Name";                                                          //将班级下拉框的显示成员设为班级数据表的名称列;
            this.cmb_Class.ValueMember = "No";                                                              //将班级下拉框的值成员设为班级数据表的编号列;
            SqlDataReader sqlDataReader = sqlCommand2.ExecuteReader();                                      //调用SQL命令的方法ExecuteReader来执行命令,并获取数据阅读器;
            if (sqlDataReader.Read())                                                                       //若数据阅读器成功读取到下一条记录(首次查询则表示第一条记录);
            {
                this.txb_No.Text = sqlDataReader["No"].ToString();                                          //在数据阅读器的索引器中指定列名,从而访问当前记录的指定列的值,并赋予相应控件;
                this.txb_Name.Text = sqlDataReader["Name"].ToString();
                this.rdb_Male.Checked = (bool)sqlDataReader["Gender"];
                this.rdb_Female.Checked = !(bool)sqlDataReader["Gender"];
                this.dtp_BirthDate.Value = (DateTime)sqlDataReader["BirthDate"];
                this.cmb_Class.SelectedValue = (int)sqlDataReader["ClassNo"];
                this.txb_Speciality.Text = sqlDataReader["Speciality"].ToString();
            }
            sqlDataReader.Close();                                                                          //关闭数据阅读器(同时关闭连接);
        }

截图如下: 

④日期控件(DateTimePicker)

代码截图同上(单选按钮)

⑤图像框(PictureBox)

声明字节数组,用于保存照片数据;但先赋予空值

 byte[] photoBytes = null;

根据照片是否为数据库空值,分别将空值、转为字节数组的照片数据赋予事先声明的字节数组

photoBytes =(sqlDataReader["Photo"] == DBNull.Value ? null : (byte[])sqlDataReader["Photo"]); 
if (photoBytes != null){
MemoryStream memoryStream = new MemoryStream(photoBytes);//声明并实例化内存流,用于读取照片的字节数据;
this.PictureBox1.Image = Image.FromStream(memoryStream);//调用图像的静态方法FromStream从内存流中读取图像,并赋予图像框;

点击更新按钮,将图片存入数据库,显示更新1行的对话框,如下图:

 

⑥网格视图(DataGridView)

sqlDataAdapter2.Fill(studentTable); 
this.DataGridView1.Columns.Clear();//数据网格视图的列集合清空;
this.DataGridView1.DataSource = studentTable;//将数据网格视图的数据源设为学生数据表;
this.DataGridView1.Columns["No"].HeaderText = "学号";//将数据网格视图的指定列的表头文本设为中文;
this.DataGridView1.Columns["Name"].HeaderText = "姓名";
this.DataGridView1.Columns["Gender"].HeaderText = "性别";

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值