1 comboBox
控件
在新增学生记录的时候,添加班级或专业信息的时候会使用到下拉选择框 comboBox
,所以现在就简单的介绍一下 comboBox
的用法:
DataSource
属性接受一个数组类型的数据,它就是下拉时的数据源- 如果想要控件是只能选择,就需要设置
DropDownStyle
属性为DropDownList
DisplayMember
属性,数据源应为一个对象列表,而DisplayMember
属性就是用于下拉显示时,对应对象应该显示信息的键值ValueMember
属性下拉选择时真正的数值对象键值SelectIndex
属性表示comboBox
控件已经选择数值对应的索引,如果索引的数值为-1
,则表示没有选择
1.1 SelectedValueChanged
事件
向 comboBox
控件绑定 SelectedValueChanged
事件,要注意的是,如果直接点击工具栏中的事件添加,comboBox
控件在初始化的时候也会触发 SelectedValueChanged
事件,所以 SelectedVauleChanged
事件需要在初始化数据后进行添加绑定,方便的做法是:先点击工具栏添加 SelectedValueChanged
事件,再到 .Designer.cs
后缀的文件中寻找相应的添加事件代码,最后剪切数据加载之后的逻辑就可以了。
2 上传图片
2.1 OpenFileDialog
控件
在新增学生记录的时候需要上传图片,此时就需要用到 OpenFileDialog
控件了,OpenFileDialog
控件用于提示用户打开文件。现在介绍一下这个控件:
OpenFileDialog
控件初始化- 定义
Filter
筛选文件格式属性(|
之前的字符串为筛选框的显示文本,之后的为筛选文件的正则表达式) - 在确认用户点击确认按钮后,获取控件的
FileName
属性,其为文件的绝对路径,在获取路径之后,就可以直接使用Image.FromFile
方法传入路径信息从而获取Image
对象,而有了Image
对象既可以通过序列化,将Image
对象存储在类型为mediumtext
的数据库中。
// 初始化 OpenFileDialog 对象
OpenFileDialog dialog = new OpenFileDialog();
// 设置筛选文件,竖号之前的为筛选框的显示文本,之后的为筛选文本格式
dialog.Filter = "图片文件(*.png;*.jpg;*.bmp;*.jpeg)|*.png;*.jpg;*.bmp;*.jpeg";
// 是否按了确定
if (dialog .ShowDialog() == DialogResult.OK)
{
string fileName = dialog.FileName;
Image image = Image.FromFile(fileName);
this.pictureBox1.Image = image;
this.pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage; // Picturebox控件大小不变,图片自动调整大小以适应控件的大小,图片完全显示,且图片长宽比例与控件长宽比例一致。
}
3 提交数据后,清空输入
用户在新增完学生信息,可能还需要继续新增,此时为了用户体验,就需要询问用户是否需要清空输入,而如果输入信息过多,逐个逐个地进行控件的清空,就会显得很繁琐,此时就有可能使用到 Control
基类。
3.1 Control
基类
Windows 窗体应用的控件都派生自 Control
类,并继承了许多通用成员,这些成员都是平时使用控件的过程中最常用的。
一些容器控件如 groupBox
本身有个 Controls
属性,里面是所有在 groupBox
控件的 Control
列表。而当前窗体 this
也有 Controls
属性,它也就是其包含所有控件的 Control
列表。
清空输入代码如下:
foreach (Control item in this.Controls)
{
if (item is PictureBox) {
PictureBox pictureBox = (PictureBox)item;
pictureBox.Image = null;
}
else if (item is TextBox)
{
TextBox textBox = (TextBox)item;
textBox.Text = "";
}
else if (item is RadioButton)
{
RadioButton radioButton = (RadioButton)item;
radioButton.Checked = false;
}
else if (item is ComboBox)
{
ComboBox comboBox = (ComboBox)item;
comboBox.SelectedIndex = -1;
}
}
4 DataGridView
控件
在查询学生信息的时候,需要表格显示数据,就需要用到 DataGridView
。DataGridView
的用法如下:
DataSource
属性接受一个数组类型的数据,它就是表格的数据源- 然后还要设置
DataPropertyName
属性,HeaderTxt
属性,Name
属性,这些属性都可以在添加控件后,在视图里点击DataGridView
控件最右侧的小箭头,再点击编辑列
或添加列
即可DataPropertyName
属性与Name
属性为对应列的数据源键值HeaderTxt
属性为表格标题显示的文本
4.1 排序
学生信息表格还需要排序功能,比如说按学号排序或者生日排序,此时就需要用到 List
中的 Sort
方法,它直接修改源数组,且接受一个继承 IComparable
接口实现 Compare
方法的实体,其中 Compare
方法就是返回一个实现排序逻辑,如:
class CompareOfbirthday : IComparer<StudentExt>
{
public int Compare(StudentExt x, StudentExt y)
{
return x.birthday.CompareTo(y.birthday);
}
}
然后,实例化该对象传入 Sort
方法中,如:
// 根据生日排序
private void button1_Click(object sender, EventArgs e)
{
studentExts.Sort(new CompareOfbirthday());
this.dataGridView1.DataSource = null; // 需要清空之前的数据,才能刷新数据
this.dataGridView1.DataSource = studentExts;
}
注意:如果直接修改
DataGridView
的DataSource
,视图并不会即时地刷新,需要先设置DataSource
为null
,然后再设置数值才达到实时地刷新。
5 Excel 打印模块
这里需要将学生详情作为类如 Excel 表格的形式打印的功能,由此需要编写一个工具类,具体步骤就是:
- 在根目录下,创建一个
Excel
文件打印模板 - 获取响应的学生信息之后,设置到
Excel
文件中 - 再操作
Excel
文件进行打印
代码的实现:
- 首先需要添加
COM
中Microsoft Excel
的引用 - 然后在对应的工具类中导入以下的包:
// 打印 Excel
using Microsoft.Office.Interop.Excel;
using Microsoft.Office.Core;
具体代码如下:
public static void ExecutePrint(StudentExt studentExt)
{
// 定义Excel 工作簿
Microsoft.Office.Interop.Excel.Application excelApp = new Application();
// 获取已创建的工作路径
string pathOfExcel = Environment.CurrentDirectory + "\\studentInfo.xls";
// 将现有工作簿加入已定义的工作簿集合中
excelApp.Workbooks.Add(pathOfExcel);
// 获取第一个工作表
Worksheet workSheet = (Worksheet)excelApp.Worksheets[1];
/**
* 写入数据
*/
// 文字设置
workSheet.Cells[4, 6] = studentExt.studentName;
workSheet.Cells[6, 6] = studentExt.sex;
workSheet.Cells[8, 6] = studentExt.className;
workSheet.Cells[10, 6] = studentExt.birthday;
// 图片设置
if (studentExt.img.Length != 0)
{
// 获取图片信息
Image img = (Image)SerializeObjectToString.DeserializeObject(studentExt.img);
// 在默认文件路径里存储图片
// 如果根目录路径已经有图片存在,则删除它
if (File.Exists(Environment.CurrentDirectory + "\\studentInfo.jpg"))
{
File.Delete(Environment.CurrentDirectory + "\\studentInfo.jpg");
}
// 保存到根目录路径
img.Save(Environment.CurrentDirectory + "\\studentInfo.jpg");
// 将图片插入到 Excel 中
// 接受第一个参数为文件路径,最后的是坐标
workSheet.Shapes.AddPicture(
Environment.CurrentDirectory + "\\studentInfo.jpg",
MsoTriState.msoFalse,
MsoTriState.msoCTrue,
10, 10, 140, 130
);
// 导入成功之后,删除图片
File.Delete(Environment.CurrentDirectory + "\\studentInfo.jpg");
}
// 打印预览
excelApp.Visible = true;
excelApp.Sheets.PrintPreview();
// 释放对象
excelApp.Quit();
System.Runtime.InteropServices.Marshal.ReleaseComObject(excelApp);
excelApp = null;
}