目录
1.2 添加MenuStrip、ToolStrip和StatusStrip控件
1 界面搭建
1.1 修改默认的Form1窗体为frmMain
上述操作会自动修改启动窗体,优于将原生的Form1窗体删除,然后通过新建窗体的方式
1.2 添加MenuStrip、ToolStrip和StatusStrip控件
构建如下界面:
1.3 为不同控件设置相同的方法
工具条和菜单栏的退出执行相同的代码,都是退出系统
对于菜单栏的退出,添加点击事件代码:
private void tsmi_exitSystem_Click(object sender, EventArgs e)
{
Close();
}
对于工具条的退出事件,直接选择菜单栏的退出函数即可
2 数据维护窗体开发
2.1 创建数据集
单击项目,添加新项;选择【数据】--【数据集】,命名为dsXK.xsd,【添加】
单击【服务器资源管理器】超链接
添加Xk数据库
添加Department数据表,设置主键为DepartNo
拖入到dsXk.xsd中
2.2 frmDepartment.cs界面设计
(1)显示数据源,并下拉设置为DataGirdView
(2)拖放Department至frmDepartment中
(3)点击DataGirdView右上小三角,编辑列
(4)主窗体中添加启动frmDepartment的代码
private void 系部信息ToolStripMenuItem_Click(object sender, EventArgs e)
{
frmDepartment fdt = new frmDepartment();
fdt.MdiParent = this;
fdt.Show();
}
2.3 班级数据库的维护
(1)创建主外键关系图
(2)班级信息维护界面设计
- 显示数据源,并下拉设置为DataGirdView
- 拖放Class表至frmClass窗体中
- 点击DataGirdView右上小三角,编辑列
- 班级ID和班级名称设置同上,对系部ID列,将其与Department表绑定,如下图
2.4 学生表的维护
(1)创建学生表
(2)拖拽,显示【详细信息】
(3)将ClassNo的TextBox换成ComnoBox
(4)对性别的操作,先将TextBox换成ComnoBox;
2.5 课程表界面设计
(1)定义课程表
(2)重写新增、保存、编辑、删除、放弃按钮
先将gbEdit、tsbDelete和tsbConcel的Enabled属性设置为false
private void ChangedEnabledState()
{
courseBindingNavigator.Enabled = !courseBindingNavigator.Enabled;
gpEdit.Enabled = !gpEdit.Enabled;
foreach (ToolStripButton tsb in tsControl.Items)
{
tsb.Enabled = !tsb.Enabled;
}
}
private void tsbInsert_Click(object sender, EventArgs e)
{
ChangedEnabledState();
courseBindingSource.AddNew();
txtCouNo.Focus();
}
private void tsbEdit_Click(object sender, EventArgs e)
{
ChangedEnabledState();
couNameTextEdit.Focus();
}
private void tsbDelete_Click(object sender, EventArgs e)
{
if (courseBindingSource.Current != null)
{
if (MessageBox.Show("确定删除吗?", "确认", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == System.Windows.Forms.DialogResult.Yes)
{
courseBindingSource.RemoveCurrent();
this.tableAdapterManager.UpdateAll(this.xkDataSet1);
}
}
}
private void tsbSave_Click(object sender, EventArgs e)
{
ChangedEnabledState();
this.Validate();
this.courseBindingSource.EndEdit();
this.tableAdapterManager.UpdateAll(this.xkDataSet1);
}
private void tsbConcel_Click(object sender, EventArgs e)
{
ChangedEnabledState();
this.courseBindingSource.CancelEdit();
}
3 登陆界面设计
3.1 创建frmLogin窗体
3.2 全局类
如果数据表中设置的数据类型Text类型,Add函数不能使用SqlDbType.Text,出现类型转换错误,此处存疑
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.SqlClient;
namespace Xk
{
class CPublic
{
public static bool IsManager;
public static DataRow LoginInfo;
public static void CheckUsers(string UserID, string UserPwd)
{
SqlConnection cn = new SqlConnection(Properties.Settings.Default.XkConnectionString);
SqlDataAdapter da = new SqlDataAdapter("SELECT * FROM Users WHERE UserID=@UserID AND UserPwd=@UserPwd", cn);
da.SelectCommand.Parameters.Add("@UserID", SqlDbType.NVarChar, 10).Value = UserID;
da.SelectCommand.Parameters.Add("@UserPwd", SqlDbType.NVarChar, 10).Value = UserPwd;
//
DataSet ds = new DataSet();
da.Fill(ds);
if (ds.Tables[0].Rows.Count > 0)
{
LoginInfo = ds.Tables[0].Rows[0];
IsManager = true;
}
else
{
LoginInfo = null;
}
}
public static void CheckStudent(int StuNo, string ClassNo)
{
SqlConnection cn = new SqlConnection(Properties.Settings.Default.XkConnectionString);
SqlDataAdapter da = new SqlDataAdapter("SELECT * FROM Student WHERE StuNo=@StuNo AND ClassNo=@ClassNo", cn);
da.SelectCommand.Parameters.Add("@StuNo", SqlDbType.Int).Value = StuNo;
da.SelectCommand.Parameters.Add("@ClassNo", SqlDbType.Int).Value = ClassNo;
DataSet ds = new DataSet();
da.Fill(ds);
if (ds.Tables[0].Rows.Count > 0)
{
LoginInfo = ds.Tables[0].Rows[0];
IsManager = false;
}
else
{
LoginInfo = null;
}
}
}
}
3.3 登录代码
private void btnLogin_Click(object sender, EventArgs e)
{
if (cbIsManeger.Checked)
{
CPublic.CheckUsers(txtID.Text, txtPwd.Text);
}
else
{
int stuID = int.Parse(txtID.Text);
CPublic.CheckStudent(stuID, txtPwd.Text);
}
if (CPublic.LoginInfo == null)
{
MessageBox.Show("密码错误", "登录", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
else
{
Close();
}
}
3.4 在主窗体前启动登录窗体
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
namespace Xk
{
static class Program
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new frmLogin());
if (CPublic.LoginInfo != null)
{
Application.Run(new frmMain());
}
}
}
}
4 小结
(1)建立数据库的主键和外键的之间的关系时,必须设置好主键【数据库小白,刚开始没搞明白,折腾了好久】
(2)多个按钮可以共享同一个点击事件,设置完第一个后,剩余的直接选择第一个点击事件的函数就可以了
(3)对原生的Form1.cs文件,右键属性,更改【文件名】,然后接受重命名操作;vs将会自动的更改因重命名导致的变更,特别的,run函数中的也会被更改掉;这种方式优于直接将原生Form1删掉的,然后再更改run的方法
(4)数据--显示数据源,左边的图标包括DataGridView和详细信息两种方式,如果要展示全部数据选用前者;若展示,选用后者
(5)将数据源拖拽到窗体中,会自动创建以下四个控件【*为表格名称】:
- *BindSource
- *TableAdapter
- tableAdapterManager
- *BindongNavigator:导航器控件
(6)对于DataGridView控件
HeaderText属性设置显示出来的列标题;DataProperityName实际决定那一列数据会被显示
ColumnType用于指示列的显示形式;
(7)ComboBoxColumn控件
若DataGridView的ColumnType指定为DataGridViewComboBoxColumn,则需指定数据源、显示数据和选定值等信息:【建议DisployStyle设置为Nothing】
若自己【使用数据项绑定】,需指定以下值:
若自定义序列,编辑项,自己手动输入:
(8)自定义数据库的增删改操作