一、基本控件数据的输入(根据我们小组现有设计进度案例讲解)
1.TextBox控件,即文本框,用于用户直接输入和显示文本。通过Text属性输入数据如下图:
2.Label控件,用来直接设置或返回标签控件中显示的文本信息。通过Label属性输入数据如下图:
3.ComboBox控件中的下拉列表中,可以显示多项数据,使用ComboBox控件中的Items集合的Add方法向控件中添加数据。通过Items属性输入数据如下图:
4.DateTimePicker控件,一般用于让用户可以从日期列表中选择单个值。运行时,单击控件边上的下拉箭头,会显示两个部分:一个下拉列表,一个用于选择日期。通过选择Values属性输入数据如下图:
5.RadioButton控件为用户提供由两个或多个互斥选项组成的选项集,需要注意的是,当用户选择某单选按钮时,同一组中的其他单选按钮不能同时选定。通过Check属性输入数据如下图所示:
6.DataGridView控件可以显示和编辑来自不同类型的数据源的表格数据,通过绑定DataSoure属性输入数据如下图所示:(由于小组设计还没用到这个控件,用例题运行截图代替)
7.PictureBox又称图片框,常用于图形设计和图像处理应用程序,在该控件中可以通过Image属性加载的图像文件格式有:位图文件(.Bmp)、图标文件(.ICO)、图元文件(.wmf)、.JPEG 和.GIF 文件。通过Image属性更改图片载入演示如下:
二、基本控件数据的输出
上图界面代码如下:
using System;
using System.Configuration; //包含访问配置文件所需的配置管理器;需事先在本项目的“引用”中添加对System.Configuration的引用;
using System.Data;
using System.Data.SqlClient;
using System.Windows.Forms;
using System.Drawing;
using System.Drawing.Imaging; //包含图像处理功能;
using System.IO;
namespace 住院医生工作站
{
public partial class frm_UserMessage : Form
{
private string PhotoFileName;
public frm_UserMessage()
{
InitializeComponent();
this.StartPosition = FormStartPosition.CenterScreen; //本窗体启动位置设为屏幕中央;
this.txb_No.ReadOnly = true;
this.cmb_Department.DropDownStyle = ComboBoxStyle.DropDownList;
}
private void btn_Load_Click(object sender, EventArgs e)
{
SqlConnection sqlConnection = new SqlConnection();
sqlConnection.ConnectionString =
ConfigurationManager.ConnectionStrings["Sql"].ConnectionString;
SqlCommand sqlCommand = new SqlCommand();
SqlCommand sqlCommand2 = new SqlCommand();
sqlCommand.Connection = sqlConnection;
sqlCommand2.Connection = sqlConnection;
sqlCommand.CommandText = "SELECT * FROM tb_HospitalDepartments;";
sqlCommand2.CommandText = "SELECT * FROM tb_Doctort WHERE DoctorNo=@No;";
sqlCommand2.Parameters.AddWithValue("@No", "0000000002");
SqlDataAdapter sqlDataAdapter = new SqlDataAdapter();
sqlDataAdapter.SelectCommand = sqlCommand;
DataTable DepartmentsTable = new DataTable();
sqlConnection.Open();
sqlDataAdapter.Fill(DepartmentsTable); //SQL数据适配器读取数据,并填充班级数据表;
this.cmb_Department.DataSource = DepartmentsTable; //将班级下拉框的数据源设为班级数据表;
this.cmb_Department.DisplayMember = "Name"; //将班级下拉框的显示成员设为班级数据表的名称列;
this.cmb_Department.ValueMember = "No";
SqlDataReader sqlDataReader = sqlCommand2.ExecuteReader();
byte[] photoBytes = null;
if (sqlDataReader.Read())
{
this.txb_No.Text = sqlDataReader["DoctorNo"].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_Department.SelectedValue = (int)sqlDataReader["DepartmentNo"];
this.txb_Phone.Text = sqlDataReader["Phone"].ToString();
this.txb_Position.Text = sqlDataReader["Position"].ToString();
photoBytes =
(sqlDataReader["Photo"] == DBNull.Value ? null : (byte[])sqlDataReader["Photo"]);
}
this.textBox1.Text = this.cmb_Department.SelectedValue.ToString();
sqlDataReader.Close();
if (photoBytes != null) //若学生的照片非空;
{
MemoryStream memoryStream = new MemoryStream(photoBytes); //声明并实例化内存流,用于读取照片的字节数据;
this.ptb_Photo.Image = Image.FromStream(memoryStream); //调用图像的静态方法FromStream从内存流中读取图像,并赋予图像框;
}
}
private void frm_UserMessage_Load(object sender, EventArgs e)
{
}
private void btn_Update_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);
SqlConnection sqlConnection = new SqlConnection(); //声明并实例化SQL连接;
sqlConnection.ConnectionString =
ConfigurationManager.ConnectionStrings["Sql"].ConnectionString; //配置管理器从配置文件读取连接字符串,并将之赋予SQL连接的连接字符串属性;
SqlCommand sqlCommand = new SqlCommand(); //声明并实例化SQL命令;
sqlCommand.Connection = sqlConnection; //将SQL命令的连接属性指向SQL连接;
sqlCommand.CommandText = //指定SQL命令的命令文本;
"UPDATE tb_Doctort"
+ " SET Name=@Name,Gender=@Gender,BirthDate=@BirthDate,DepartmentNo=@DepartmentNo,Phone=@Phone,Photo=@Photo"
+ " WHERE DoctorNo=@No;";
this.textBox1.Text = this.cmb_Department.SelectedValue.ToString();
sqlCommand.Parameters.AddWithValue("@Name", this.txb_Name.Text.Trim()); //向SQL命令的参数集合添加参数的名称、值;
sqlCommand.Parameters.AddWithValue("@Gender", this.rdb_Male.Checked);
sqlCommand.Parameters.AddWithValue("@BirthDate", this.dtp_BirthDate.Value);
sqlCommand.Parameters.AddWithValue("@DepartmentNo", this.textBox1.Text.Trim ());
sqlCommand.Parameters.AddWithValue("@Phone", this.txb_Phone.Text.Trim());
sqlCommand.Parameters.AddWithValue("@Photo", photoBytes);
sqlCommand.Parameters.AddWithValue("@No", "0000000002");
sqlConnection.Open(); //打开SQL连接;
int rowAffected = sqlCommand.ExecuteNonQuery(); //调用SQL命令的方法ExecuteNonQuery来执行命令,向数据库写入数据,并返回受影响行数;
sqlConnection.Close(); //关闭SQL连接;
MessageBox.Show("更新" + rowAffected.ToString() + "行。");
}
private void btn_OpenPhoto_Click_1(object sender, EventArgs e)
{
OpenFileDialog openPhotoDialog = new OpenFileDialog() //声明并实例化打开文件对话框;
{ //在初始化器中,设置打开文件对话框的各属性;
Title = "打开照片文件(位图格式)" //对话框标题;
,
Filter = "BMP Files (*.jpg)|*.jpg" //文件格式过滤器;
,
InitialDirectory = @"C:\" //初始目录;
};
if (openPhotoDialog.ShowDialog() == DialogResult.OK) //显示打开文件对话框,若打开文件对话框的对话结果为点击OK键;
{
this.PhotoFileName = openPhotoDialog.FileName; //将对话框获得的文件名,存入本窗体的私有字段中;
this.ptb_Photo.Image = Image.FromFile(this.PhotoFileName); //调用图像的静态方法FromFile从指定文件中读取图像,并赋予图像框;
}
}
}
}
DataGridView控件的数据输出代码如下:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
//添加调用:
using System.Data.SqlClient; //包含访问SQL Server所需的各类对象;
namespace Ex52_Table_GridView
{
public partial class frm_StudentTable : Form
{
/// <summary>
/// 私有字段:学生表;
/// </summary>
private DataTable StudentTable;
/// <summary>
/// 公有方法:构造函数;
/// </summary>
public frm_StudentTable()
{
InitializeComponent();
this.StartPosition = FormStartPosition.CenterScreen; //本窗体启动位置设为屏幕中央;
this.dgv_Score.AllowUserToAddRows = false; //数据网格视图不允许用户添加行;
this.dgv_Score.RowHeadersVisible = false; //数据网格视图的行标题不可见;
this.dgv_Score.BackgroundColor = Color.White; //数据网格视图的背景色设为白色;
this.dgv_Score.AutoSizeColumnsMode =
DataGridViewAutoSizeColumnsMode.AllCells; //数据网格视图的自动调整列宽模式设为(显示)所有单元格;
}
/// <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=EduBaseDemo;Integrated Security=sspi"; //在字符串变量中,描述连接字符串所需的服务器地址、数据库名称、集成安全性(即是否使用Windows验证);
SqlCommand sqlCommand = new SqlCommand(); //声明并实例化SQL命令;
sqlCommand.Connection = sqlConnection; //将SQL命令的连接属性指向SQL连接;
sqlCommand.CommandText = "SELECT * FROM tb_Class;"; //指定SQL命令的命令文本;该命令查询所有班级,以用作下拉框数据源;
SqlDataAdapter sqlDataAdapter = new SqlDataAdapter(); //声明并实例化SQL数据适配器;
sqlDataAdapter.SelectCommand = sqlCommand; //将SQL数据适配器的查询命令属性指向SQL命令;
DataTable classTable = new DataTable(); //声明并实例化数据表,用于保存所有班级,以用作下拉框数据源;
DataTable studentTable = new DataTable(); //声明并实例化数据表,用于保存所有学生,以用作数据网格视图的数据源;
sqlConnection.Open(); //打开SQL连接;
sqlDataAdapter.Fill(classTable); //SQL数据适配器读取数据,并填充班级数据表;
sqlCommand.CommandText = "SELECT * FROM tb_Student;"; //指定SQL命令的命令文本;该命令查询所有学生;
sqlDataAdapter.Fill(studentTable); //SQL数据适配器读取数据,并填充学生数据表;
sqlConnection.Close(); //关闭SQL连接;
this.StudentTable = studentTable; //将学生表赋予本窗体的相应私有字段,便于其它方法访问;
this.dgv_Score.Columns.Clear(); //数据网格视图的列集合清空;
this.dgv_Score.DataSource = studentTable; //将数据网格视图的数据源设为学生数据表;
this.dgv_Score.Columns["No"].HeaderText = "学号"; //将数据网格视图的指定列的表头文本设为中文;
this.dgv_Score.Columns["Name"].HeaderText = "姓名";
this.dgv_Score.Columns["Gender"].HeaderText = "性别";
this.dgv_Score.Columns["BirthDate"].HeaderText = "生日";
this.dgv_Score.Columns["Speciality"].HeaderText = "特长";
this.dgv_Score.Columns["Photo"].HeaderText = "照片";
this.dgv_Score.Columns["ClassNo"].Visible = false; //将数据网格视图的指定列设为不可见;
DataGridViewComboBoxColumn classColumn = new DataGridViewComboBoxColumn(); //声明并实例化数据网格视图下拉框列,用于设置学生的班级;
this.dgv_Score.Columns.Add(classColumn); //将下拉框列加入数据网格视图的列集合;
classColumn.Name = "Class"; //设置下拉框列的名称;
classColumn.HeaderText = "班级"; //设置下拉框列的表头文本;
classColumn.DataSource = classTable; //设置下拉框列的数据源为班级数据表;
classColumn.DisplayMember = "Name"; //设置下拉框列的显示成员为(班级数据表的)名称(列);
classColumn.ValueMember = "No"; //设置下拉框列的值成员为(班级数据表的)编号(列);
classColumn.DataPropertyName = "ClassNo"; //设置下拉框列的数据属性名称为(学生数据表的)班级编号(列);
classColumn.DisplayIndex = 4; //设置下拉框列的显示顺序;
classColumn.AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells; //设置下拉框列的自动调整列宽模式为(显示)所有单元格;
this.dgv_Score.Columns[this.dgv_Score.Columns.Count - 2].AutoSizeMode = //数据网格视图的倒数第2列(即照片列)的自动调整列宽模式设为填充(至数据网格视图右侧边缘);
DataGridViewAutoSizeColumnMode.Fill;
}
/// <summary>
/// 私有方法:点击更新按钮;
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btn_Update_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 = //指定SQL命令的命令文本;
"UPDATE tb_Student"
+ " SET Name=@Name,Gender=@Gender,BirthDate=@BirthDate,ClassNo=@ClassNo,Speciality=@Speciality"
+ " WHERE No=@No;";
sqlCommand.Parameters.Add("@Name",SqlDbType.VarChar,0,"Name"); //向SQL命令的参数集合添加参数的名称、SQL Server数据类型、长度(仅用于定长类型)、所绑定的数据表中的列名;
sqlCommand.Parameters.Add("@Gender", SqlDbType.Bit, 0, "Gender");
sqlCommand.Parameters.Add("@BirthDate", SqlDbType.Date, 0, "BirthDate");
sqlCommand.Parameters.Add("@ClassNo", SqlDbType.Int, 0, "ClassNo");
sqlCommand.Parameters.Add("@Speciality", SqlDbType.VarChar, 0, "Speciality");
sqlCommand.Parameters.Add("@No", SqlDbType.Char, 10, "No");
SqlDataAdapter sqlDataAdapter = new SqlDataAdapter(); //声明并实例化SQL数据适配器,同时借助构造函数,将其SelectCommand属性设为先前创建的SQL命令;
sqlDataAdapter.UpdateCommand = sqlCommand; //将SQL数据适配器的更新命令属性指向SQL命令;
DataTable studentTable = this.StudentTable; //声明数据表,并指向本窗体的相应私有字段;
sqlConnection.Open(); //打开SQL连接;
int rowAffected = sqlDataAdapter.Update(studentTable); //SQL数据适配器根据学生数据表提交更新,并返回受影响行数;
sqlConnection.Close(); //关闭SQL连接;
MessageBox.Show("更新" + rowAffected.ToString() + "行。"); //在消息框显示受影响行数;
}
private void frm_StudentTable_Load(object sender, EventArgs e)
{
}
}
}
三.思维导图