C# 实践1——与数据库相关的窗体

来源:互联网 发布:手机淘宝模板如何制作 编辑:程序博客网 时间:2024/05/25 15:41

**初始界面**
问题1:初始拖动控件过小

ADO.NET导入数据库

public partial class Form1 : Form    {        jiaowudataEntities mydb = new jiaowudataEntities();

新建一个数据库全局变量

**管理界面**
IsMdiContainer属性true,使之成为一个父窗体

        private void button1_Click(object sender, EventArgs e)        {            var user = textBox1.Text;            var code = textBox2.Text;            var xs = mydb.学生表.Any(x => x.姓名 == user && x.密码 == code);            if (xs)            {                Form2 FormMain = new Form2();                FormMain.Show();            }            else            {                MessageBox.Show("用户名或密码错误");            }        }

初始界面“确认”键代码,如果用户名和密码存在于数据库中,则弹出管理界面窗口,否则弹窗提示“用户名或密码错误”
问题2:var xs = mydb.学生表.Any(x => x.姓名 == user && x.密码 == code);关于Any中的表示

学生表
Form3只有一个dataGridView控件,目的是在管理界面中作为子窗体显示

    public partial class Form3 : Form    {        jiaowudataEntities mydb = new jiaowudataEntities();

新建数据库全局变量

        private void Form3_Load(object sender, EventArgs e)        {            dataGridView1.DataSource = mydb.学生表;        }

在dataGrvidView控件中显示学生表中的数据
这里写图片描述
显示如上错误

     dataGridView1.DataSource = mydb.学生表.ToList();

使用ToList方法解决
问题3:dataGridView的数据引用

PS:控件的Anchor属性可以固定其与窗体边缘的相对位置,以达到调整窗体大小可以相应改变控件大小的目的

    private void 学生管理ToolStripMenuItem_Click(object sender, EventArgs e)    {        Form3 xsb = new Form3();        xsb.MdiParent = this;        xsb.Show();    }

管理界面中单击管理菜单下的学生管理按钮的代码,制定Form3的父窗体到管理界面窗体,单击时显示。
问题4:重复单击学生管理按钮,弹出多个窗体,与容器窗体初衷相悖

学生表(改)
Form3上添加“增删查改”四个标签

这里写图片描述
“添加”与“修改”按钮共用的信息修改窗口

但是,修改过程中如何实现从窗口Form3调用所在行信息好麻烦,未完待续。


过了半个星期了,继续- -|||

        学生表 currxs;        public Form4(学生表 xs)        {            InitializeComponent();            xs = currxs;            textBox1.Text = xs.学号;        }

之前是这么写的来着,然后运行到这会报错显示xs是null,可不是嘛,自己在前面定义一个currxs然后又赋值给xs,宛若智障。。。

            Form4 FormEdit = new Form4(xs);
        学生表 currxs;        public Form4(学生表 xs)        {            InitializeComponent();            currxs = xs;            textBox1.Text = currxs.学号;            textBox2.Text = currxs.姓名;            textBox3.Text = currxs.性别;            textBox4.Text = currxs.班级;            textBox5.Text = currxs.通信地址;            textBox6.Text = currxs.出生日期.ToString();            textBox7.Text = currxs.身高.ToString();            textBox8.Text = currxs.金额.ToString();        }

窗体间的参数传递:在调用窗体的时候,加上参数;被调用窗体直接引用即可。
此处老师的示例新建了一个全局变量,并先将所调用的参数传递给本窗体的全局变量再进行 操作。

        private void button1_Click(object sender, EventArgs e)        {            var xs = new 学生表();            xs.学号 = textBox1.Text;            xs.姓名 = textBox2.Text;            xs.性别 = textBox3.Text;//            xs.班级 = textBox4.Text;            xs.通信地址 = textBox5.Text;            xs.出生日期 = DateTime.Parse(textBox6.Text);            xs.身高 = decimal.Parse(textBox7.Text);            xs.金额 = decimal.Parse(textBox8.Text);            var mydb = new jiaowudataEntities();            mydb.学生表.Add(xs);            mydb.SaveChanges();            this.Close();        }

其中老师给的数据库中“班级”与其他表有关联(其他表的主键),所以不可以进行更改

        private void textBox2_KeyDown(object sender, KeyEventArgs e)        {            if (e.KeyCode == Keys.Enter)            {                var user = textBox1.Text;                var code = textBox2.Text;                var xs = mydb.学生表.Any(x => x.姓名 == user && x.密码 == code);                if (xs)                {                    Form2 FormMain = new Form2();                    FormMain.Show();                }                else                {                    MessageBox.Show("用户名或密码错误");                }            }        }

新增在登录界面回车进行输入的功能,利用KeyDown和 .KeyCode==Keys.Enter
问题:查询如何定位到DateGridView中所查询的行