目录
S5 点击admin2.cs里的“添加图书”跳转到建立的添加图书界面
本系列文章基于B站UP主“面朝星海我心澎湃”的视频P4,P5,时空门:P4 管理员相关页面的布局
P5 图书显示和图书添加区别在:
①up主用的SQLserver,但是本文章是MySQL
②本文章的数据库表比up主复杂一点,以及表里的内容不一样(本文章无论用户表还是管 理员表都是海贼王滴,没办法,海米一枚~)
S1 admin1.cs
①修改界面名称
选中窗体,修改属性的Font->Text为”管理员主页面“
②添加菜单
工具箱->MenuStrip
③Label
加Label进行界面布局,通过属性->Font->字体大小 or 管理员主页面修改布局
S2 图书管理页面
①添加窗口
添加新的窗口->命名为admin2
②修改界面名称
选中窗体,修改属性的Font->Text为”图书管理页面“
③页面布局
1.DataGridView
工具箱搜索 DataGridView
属性->布局->dock 选择你想要的布局,这里是left
点小三角形->编辑列->添加->添加页眉文本,重复”四“直到添加完你想加的所有属性(这里的属性是你自己设计book表时的属性)添加完全部后点”关闭“-》确定
全部加入后可发现,不是所有的属性都能显示,因此需要修改 属性->布局 的AutoSizeColmnsMode参数,根据喜欢选择一个喜欢的参数
根据需求,修改以下参数,不懂的参数,自己百度
(属性->行为)AllowUserToAddRows:True->False【禁止用户添加空白行,因此,最后的空白 row 不再显示】
AllowUserToAddRows:True->False【能否删除】
AllowUserToResizeColumns:True->False【禁止用户改变列的列宽】
AllowUserToResizeRows:True->False【禁止用户改变行的行高】
MultiSelect:True->False【一次能否选择多行】
SelectionMode:FullRowSelect【一次可选择一整行,而非一个字段】
(属性->外观)RowHeadersVisible:True->False【使抬头的空白小框看不到,下图2】
2.button
加几个button->属性->font->Text->添加图书...
ps:由于添加的button比较多,所以你可以先添加一个,设置完它的字体大小,字形,再C+V
对了,随便把这几个button的Name改了,方便后续函数的编写
3.TextBox
拉两个文本框放在“书名查询”和“书号查询”旁边,随便把这几个TextBox的Name改了
S3图书显示
①点击图书管理后跳转到目标界面
双击admin1.cs里的图书管理,进入函数设置,对private void 图书管理ToolStripMenuItem_Click(object sender, EventArgs e)进行如下填写
private void 图书管理ToolStripMenuItem_Click(object sender, EventArgs e)
{
admin2 admin = new admin2();
admin.ShowDialog();
}
②显示图书的所有信息
即执行 SELECT * FROM ks_book; 这个MySQL语句(PS:这个MySQL语句是直接从navicat里copy过来的)
双击admin2.cs【设计】页面头-->进入admin2.cs的private void admin2_Load(object sender, EventArgs e)函数,进入之后-->在该函数外面写一个用于“从数据库读取数据显示在表格控件中”的名为Table的函数-->编辑Table函数-->在rivate void admin2_Load(object sender, EventArgs e)函数中调用Table函数.
最后附带一个整体效果和运行截图,以及全部的代码,还有Table()的另外一种写法(比较清晰但是麻烦,现在这个粗暴但是简单)
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace WindowsFormsApp1
{
public partial class admin2 : Form
{
public admin2()//admin2的构造方法,实例化的时候就会执行,即new admin2()的时候就执行了
{
InitializeComponent();
}
private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
}
private void admin2_Load(object sender, EventArgs e)//当整个窗体构建完了后就会执行这个函数
{
Table();
}
//从数据库读取数据显示在表格控件中
public void Table()
{
dataGridView1.Rows.Clear();//将控件中已经有的旧数据全部清空
Dao dao = new Dao();
string sql = "SELECT * FROM ks_book;";//要执行的sql语句,建议从编译器上copy该语句再黏贴到此处
IDataReader dc = dao.read(sql);
while(dc.Read())//当查询结果到达末尾后跳出while循环
{
//将读到的数据添加到dataGridView控件中
//这里几个dc[]取决于你在页面的那里设置了几个属性
dataGridView1.Rows.Add(dc[0].ToString(), dc[1].ToString(), dc[2].ToString(), dc[3].ToString(), dc[4].ToString(), dc[5].ToString(), dc[6].ToString(), dc[7].ToString());
}
dc.Close();
dao.DaoClose();
}
}
}
S4图书添加
①构造添加的页面
添加新的窗口->命名为admin21(即admin2下的一个子窗体)
②修改界面名称
选中窗体,修改属性的Font->Text为”添加图书“
③页面布局
1.Label && TextBox &&
工具箱搜索Label-->根据你的insert语句里的属性数量添加相应的Label 和 TextBox 数
【INSERT INTO ks_book VALUES
(1007,'VStest','龙','革命军',NULL,NULL,59.0,'在馆');】
【书号,书名,作者,出版社,ISBN ,Catalog,价格,在馆情况】
可见,需要添加8个label && TextBox,可先弄好一组的字形,大小,Font->Text再CV
(PS:这几个TextBox的名字你可以改,我这里没改,因为懒,不过如果你不改你就得记得这几个TextBox各自代表什么,虽然通过单击就能看到他的名字了)
2.Button
加2个button Font->Text分别为“添加图书”和“取消”,其Name分别为:“button_add_book” ,“button_empty”
双击“添加图书”的button,进入admin21.cs的private void button_add_book_Click(object sender, EventArgs e)函数编辑页面-->填入如下代码->运行(可进入Program.cs修改Application.Run(new login());函数,使现在编辑的admin21.cs窗体直接执行),注意,由于在设计ks_book表的bkStatus属性时设置为 char(2),因此可添加的内容只能是两个字(数字)以内,否则会报错,因此在“在馆情况”下弄一个label提示只能填“在馆”或者“不在”,避免报错,以下为使 现在编辑的admin21.cs窗体直接执行的函数修改 和 因填入超过2个字符引发的报错 和 成功运行的界面(也可在编译器navicat里查询看自己是否添加成功)以及private void button_add_book_Click(object sender, EventArgs e)函数编辑代码
//Application.Run(new login());
Application.Run(new admin21());//指定从那个窗体启动
private void button_add_book_Click(object sender, EventArgs e)//添加图书按钮的事件
{
Dao dao = new Dao();
string sql = $"INSERT INTO ks_book VALUES('{textBox1.Text}','{textBox2.Text}','{textBox3.Text}','{textBox4.Text}','{textBox5.Text}','{textBox6.Text}',{textBox7.Text},'{textBox8.Text}');";
int n=dao.Execute(sql);//dao.Execute(sql)返回受影响的行数
if(n>0)//受影响行数大于1,即添加成功
{
MessageBox.Show("Added successfully!");
}
else//受影响行数小于1,即添加失败
{
MessageBox.Show("I am sorry,but you fail~~");
}
}
④添加成功后清空界面框
就在刚刚完成的private void button_add_book_Click(object sender, EventArgs e)函数里的else下面写
法一:遍历所有TextBox,将其赋值为空
法二:一条一条写,赋值为空
//添加成功后清空界面框
//法1 遍历所有TextBox,将其赋值为空
foreach (System.Windows.Forms.Control control in this.Controls)
{
if (control is System.Windows.Forms.TextBox)
{
System.Windows.Forms.TextBox tb = (System.Windows.Forms.TextBox)control;
tb.Text = String.Empty;
}
}
//法2 一条一条写,赋值为空
/*textBox1.Text = "";
textBox2.Text = "";
textBox3.Text = "";
textBox4.Text = "";
textBox5.Text = "";
textBox6.Text = "";
textBox7.Text = "";
textBox8.Text = "";*/
⑤取消button
双击“取消”button,在其中输入清空界面框的代码(上一条),法一或者法二都可以
S5 点击admin2.cs里的“添加图书”跳转到建立的添加图书界面
双击admin2.cs【设计】里的“添加图书”,进入admin2.cs的private void button_add_book_Click(object sender, EventArgs e)函数在里加入如下代码
private void button_add_book_Click(object sender, EventArgs e)
{
admin21 a = new admin21();
a.ShowDialog();
}
S6 添加图书按钮的健壮性检查
即输入不能为空(因为有些属性是主码,为空会报错)
方法:把private void button_add_book_Click(object sender, EventArgs e)函数里的内容加到if里else里为:MessageBox.Show("鼠鼠我呀,不喜欢输入为空呢");
private void button_add_book_Click(object sender, EventArgs e)//添加图书按钮的事件
{
if(textBox1.Text!=""&& textBox2.Text != "" )
{
Dao dao = new Dao();
textBox8.Text = "";
textBox7.Text = "0";
string sql = $"INSERT INTO ks_book VALUES('{textBox1.Text}','{textBox2.Text}','{textBox3.Text}','{textBox4.Text}','{textBox5.Text}','{textBox6.Text}',{textBox7.Text},'{textBox8.Text}');";
int n = dao.Execute(sql);//dao.Execute(sql)返回受影响的行数
if (n > 0)//受影响行数大于1,即添加成功
{
MessageBox.Show("Added successfully!");
}
else//受影响行数小于1,即添加失败
{
MessageBox.Show("I am sorry,but you fail~~");
}
//添加成功后清空界面框
//法1 遍历所有TextBox,将其赋值为空
foreach (System.Windows.Forms.Control control in this.Controls)
{
if (control is System.Windows.Forms.TextBox)
{
System.Windows.Forms.TextBox tb = (System.Windows.Forms.TextBox)control;
tb.Text = String.Empty;
}
}
//法2 一条一条写,赋值为空
/*textBox1.Text = "";
textBox2.Text = "";
textBox3.Text = "";
textBox4.Text = "";
textBox5.Text = "";
textBox6.Text = "";
textBox7.Text = "";
textBox8.Text = "";*/
}
else
{
MessageBox.Show("鼠鼠我呀,不喜欢输入为空呢");
}
}