C#笔记(学生管理系统实战 - 新增和查询学生记录)

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 控件

在查询学生信息的时候,需要表格显示数据,就需要用到 DataGridViewDataGridView 的用法如下:

  • 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;
}

注意:如果直接修改 DataGridViewDataSource,视图并不会即时地刷新,需要先设置 DataSourcenull,然后再设置数值才达到实时地刷新。

5 Excel 打印模块

这里需要将学生详情作为类如 Excel 表格的形式打印的功能,由此需要编写一个工具类,具体步骤就是:

  • 在根目录下,创建一个 Excel 文件打印模板
  • 获取响应的学生信息之后,设置到 Excel 文件中
  • 再操作 Excel 文件进行打印

代码的实现:

  • 首先需要添加 COMMicrosoft 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;
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值