服务端管理工具编写(三)——各控件的安排及事件

来源:互联网 发布:淘宝九块九包邮在哪 编辑:程序博客网 时间:2024/06/06 18:30

C#是面向对象的,所以重点是各控件的事件,控件有很多事件,不同的控件还有不同的事件,只要挑选好控件的事件进行代码编写,就可以满足需求。

有些代码可以在不同的控件事件中编写都可以满足要求的,如“会议管理”选项卡中的“会议地点”后面的combox初始化,可以在窗体加载事件中进行初始化,也可以在“会议管理”选项卡加载事件中进行初始化,甚至可以在自己获取焦点的时候进行初始化,都可以达到让它初始化列出所有会议室的目的,因此,以下博文除非有特别需要,否则不针对某个控件进行事件讲述,只讲如何实现目标。

由于很多代码会用到上篇博文讲到的公共函数,因此项目需要引用这个dll文件,由于这个dll文件本身就是在同一个解决方案里面的,所以引用就很简单了。在MeetingManage项目中的引用中鼠标右键单击,在菜单中选中添加引用,在弹窗中有个“项目”选项卡,里面只有一个,就是“MeetingData”,选中确定就搞定了。

一、给dataGridView加载数据,列出符合条件的会议。

这个功能会用得比较多,窗体初始化要用,刷新按钮要用,添加完新会议也要用,所以单独编写一个函数,需要用的时候直接调用就是了。要注意的是控件名,我用的是系统默认的名称,涉及到控件名的时候我会注释出来的。

public void MeetingRefresh()        {            //由于是调试阶段,下面的SQL语句不加限制条件,把所以会议都从数据库中选出来。
            DataTable DT = MeetingData.MdbData.GetDataTable("Select ID,mName,mTimeStar,mTimeOver,mRoom from Meeting");            if (DT.Rows.Count > 0)            {
                //dataGridView如果直接绑定DataTable会在顶行显示字段名,那一堆英文名不好理解,所以重新弄一个DataTable                DataTable dMeeting = new DataTable();                dMeeting.Columns.Add("编号", typeof(string));                dMeeting.Columns.Add("会议名称", typeof(string));                dMeeting.Columns.Add("开始时间", typeof(string));                dMeeting.Columns.Add("结束时间", typeof(string));                dMeeting.Columns.Add("会议室", typeof(string));                for (int i = 0; i < DT.Rows.Count; i++)                {                    DataRow NewRow;                    NewRow = dMeeting.NewRow();                    NewRow["编号"] = DT.Rows[i]["ID"].ToString().Trim();                    NewRow["会议名称"] = DT.Rows[i]["mName"].ToString().Trim();                    NewRow["开始时间"] = DT.Rows[i]["mTimeStar"].ToString().Trim();                    NewRow["结束时间"] = DT.Rows[i]["mTimeOver"].ToString().Trim();                    NewRow["会议室"] = MeetingData.MdbData.GetAny("MeetingRoom", "mName", "ID", DT.Rows[i]["mRoom"].ToString().Trim()).Trim();                    dMeeting.Rows.Add(NewRow);                }
                //<span style="font-family: Arial, Helvetica, sans-serif;">dataGridView1就是控件,用于显示所有会议,具体用法可以百度之,下面一句代码就是把数据绑定。</span>                dataGridView1.DataSource = dMeeting;
                //设置dataGridView1列宽度                dataGridView1.RowHeadersWidth = 30;                dataGridView1.Columns[0].Width = 40;                dataGridView1.Columns[1].Width = 342;                dataGridView1.Columns[2].Width = 115;                dataGridView1.Columns[3].Width = 115;                dataGridView1.Columns[4].Width = 140;
                //设置dataGridView1的标题栏和内容栏文字对齐方式,第一句是标题栏文字居中,第二句是内容栏文字左对齐                dataGridView1.AlternatingRowsDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleLeft;                dataGridView1.ColumnHeadersDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
                //能进入这里表示数据库中有符合条件的会议,所以把label5藏起来,label5是提示没有会议的静态显示label。                label5.Hide();            }            else            {                //如果数据库中没有数据,则隐藏无关的控件,dataGridView1是显示会议数据用的,label9是提示选择会议的那行文字,comboBox2是列出操作选项的,button4是那个确定按钮。
                dataGridView1.Hide();                label9.Hide();                comboBox2.Hide();                button4.Hide();            }        }
这个就是读取数据库会议数据并绑定在dataGridView1控件中的代码,由于是一个单独的函数,可以在根据需要放在form1的Load时间中,也可以放在选项卡的加载事件中,随便啦。例如单击刷新按钮事件就可以直接调用这个函数了,项目中刷新按钮的的名称为button3,只需要如下代码

        private void button3_Click(object sender, EventArgs e)//刷新会议        {            MeetingRefresh();        }

dataGridView这个控件本身是可以编辑数据并进行数据库同步的,但我只需要显示功能,因为编辑功能有点复杂,单位使用这管理工具的人水平还没那么高,所以有些属性要先设好,AllowUserToAddRows设为False;AllowUserToDeleteRows设置为False;这个两个属性是不可添加记录,不可删除记录。
接下来讲一下系统中会议操作选项的添加以及确定按钮事件响应

操作选项是我刚开始的时候弄进来,就是为了操作列出的会议,但后来我添加了右键菜单,懒得删除相应的控件和代码,不过给小家伙们学习学习也不错的。列出操作选项的控件名叫comboBox2,一看就知道是个comboBox啦。

DataTable OP = new DataTable();OP.Columns.Add("Display", typeof(string));OP.Columns.Add("sValue", typeof(string));DataRow OPRow;OPRow = OP.NewRow();OPRow["Display"] = "请选择一项操作";OPRow["sValue"] = "0";OP.Rows.Add(OPRow);OPRow = OP.NewRow();OPRow["Display"] = "修改基本信息";OPRow["sValue"] = "1";OP.Rows.Add(OPRow);OPRow = OP.NewRow();OPRow["Display"] = "编辑会议议程";OPRow["sValue"] = "2";OP.Rows.Add(OPRow);OPRow = OP.NewRow();OPRow["Display"] = "上传会议文件";OPRow["sValue"] = "7";OP.Rows.Add(OPRow);OPRow = OP.NewRow();OPRow["Display"] = "选择会议主持人";OPRow["sValue"] = "3";OP.Rows.Add(OPRow);OPRow = OP.NewRow();OPRow["Display"] = "选择与会人员";OPRow["sValue"] = "4";OP.Rows.Add(OPRow);OPRow = OP.NewRow();OPRow["Display"] = "启动会议";OPRow["sValue"] = "5";OP.Rows.Add(OPRow);OPRow = OP.NewRow();OPRow["Display"] = "清理过期会议";OPRow["sValue"] = "6";OP.Rows.Add(OPRow);comboBox2.DataSource = OP;comboBox2.DisplayMember = "Display";comboBox2.ValueMember = "sValue";
原理很简单,先定义一个DataTable,只有两字段Display和sValue,一个用于显示,一个是真正的值,由于其他程序进行判断,最后绑定comboBox2数据源为这个表,并把comboBox2的DisplayMember设为Display,把ValueMember设为sValue。这段代码根据需要可以单列做一个函数,也可以放在窗体或选项卡加载事件中,反正放在使用它之前完成就可以了,添加选项按照代码中格式照加就是了,添加一个选项就4句代码而已。
与comboBox2关联应用的是一个按钮,名字叫button4,这个按钮就是查看comboBox2选中了那个选项,根据这个进行相应处理。其实这个button完全是多余的,纯粹是多一步操作,为了配合习惯而设置的。button4单击事件完全可以在comboBox2的SelectionChangeCommitted事件中完成的,不过也给出代码,差不多的,供参考。

        private void button4_Click(object sender, EventArgs e)//会议操作        {            string iOP = comboBox2.SelectedValue.ToString();            if (iOP =="0")            {                MessageBox.Show("请选择一个操作项目","错误",MessageBoxButtons.OK,MessageBoxIcon.Error);                return;            }            string sMeetingID = dataGridView1.CurrentRow.Cells[0].Value.ToString();            switch (iOP)            {                 case "1":                    //处理代码                    break;                case "2":                    //处理代码                    break;                default:                    break;            }        }
“会议管理”选项卡中显示会议主要代码就是这些,下面讲讲添加新会议,按图拉那一堆控件摆好就不多说了,先讲讲列出会议室的代码。

列出会议室控件也是个comboBox1,看后面的数字就知道了吧,我写程序时候由于数据库没有数据,是先写添加会议功能的,哈哈。

DataTable DT= MeetingData.MdbData.GetDataTable("Select * from MeetingRoom");            if (DT.Rows.Count > 0)            {                comboBox1.DataSource = DT;                comboBox1.DisplayMember = "mName";                comboBox1.ValueMember = "ID";            }            else                MessageBox.Show("请先添加会议室!", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
这段代码就不用多说了吧,读取所有会议室到一个DataTable中,并绑定到comboBox1,设置DisplayMember和ValueMember为相应的字段。
好,现在开始添加新会议,前提是数据库中已经有会议室,可以自己使用Access从数据库里面自己弄进去,如果系统只有一个会议室,可以删除相应的代码。添加新会议其实就是button2的Click事件。
private void button2_Click(object sender, EventArgs e)//添加新会议        {
//textBox1是标题输入框,定义个string变量读取它的文本,并清除前后空格            string sTitle = textBox1.Text.Trim();
//dataTimePicker1和dataTimePicker2都是时间日期控件,定义两个DataTime变量读取它们的值            DateTime dStar = dateTimePicker1.Value;            DateTime dEnd= dateTimePicker2.Value;
//comboBox1是列表控件,列出所有会议室            string sRoom = comboBox1.SelectedValue.ToString();
//开始进行数据校验
//检查标题清除前后空格后是否为空            if (sTitle == "")            {                MessageBox.Show("会议标题不能为空!", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);                return;            }
//检查会议开始时间是否小于结束时间            if (dStar >= dEnd)            {                MessageBox.Show("会议开始时间大于或等于结束时间!", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);                return;            }
//检查会议室是否有选中,其实这段是多余的,除非其它代码在这个控件中添加了不存在的选项,否则总会选中一个会议室的。            if (Convert.ToInt32(sRoom) < 1)            {                MessageBox.Show("请选择开会的会议室!", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);                return;            }
//要生成插入的SQL语句,定义了两个字符串数组,注意sValue,要根据值的不同在前后添加上单引号的。            string[] sField={"mName","mTimeStar","mTimeOver","mRoom"};            string[] sValue = { "'" + sTitle + "'", "'" + dStar.ToString() + "'", "'" + dEnd.ToString() + "'", sRoom };
//生成插入数据的SQL指令            string sCmd = MeetingData.MdbData.SQLInsert("Meeting", sField, sValue);
//执行指令            MeetingData.MdbData.SQLCom(sCmd);            MessageBox.Show("会议添加成功,请进行后续设置","提示",MessageBoxButtons.OK, MessageBoxIcon.Information);
//刷新dataGridView1的数据            MeetingRefresh();        }
添加新会议就那么简单,代码我都做了注释了,在讲讲添加会议室,总不可能老是用Access来添加吧,虽然都是添加一次就算数,修改的可能性等于零,没有这功能也无所谓,但从后面扩展需要添加会议室座椅安排等考虑,我还是设置了这个选项卡,但项目紧张,先弄个添加会议室功能顶着用先。

使用dataGridView列出所有会议室,控件名称为dataGridView2

            DataTable DT = MeetingData.MdbData.GetDataTable("Select ID,mName from MeetingRoom");            if (DT.Rows.Count > 0)            {                DataTable dRoom = new DataTable();                dRoom.Columns.Add("编号", typeof(string));                dRoom.Columns.Add("会议室名称", typeof(string));                dRoom.Columns.Add("状态", typeof(string));                for (int i = 0; i < DT.Rows.Count; i++)                {                    DataRow NewRow;                    NewRow = dRoom.NewRow();                    NewRow["编号"] = DT.Rows[i]["ID"].ToString().Trim();                    NewRow["会议室名称"] = DT.Rows[i]["mName"].ToString().Trim();                    NewRow["状态"] = "空闲";                    dRoom.Rows.Add(NewRow);                }                dataGridView2.DataSource = dRoom;                dataGridView2.RowHeadersWidth = 30;                dataGridView2.Columns[0].Width = 40;                dataGridView2.Columns[1].Width = 190;                dataGridView2.Columns[2].Width = 155;                dataGridView2.AlternatingRowsDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleLeft;                dataGridView2.ColumnHeadersDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;                label7.Hide();            }            else                dataGridView2.Hide();
和列出所有会议是一个鸟样的,注意有个状态这个列,值都是空闲的,这个是想着判断当前日期时间是否有会议的,后来觉得没什么用,就这样挂着了,可以删除掉的。
label7是提示没有会议室的提示静态显示label
添加新会议室,其实就是button1的Click事件,这部分代码和添加新会议差不多的,都是读取文本框值清前后空格,进行规则检查,没问题就写入数据库。

        private void button1_Click(object sender, EventArgs e)//添加会议室        {            if (textBox2.Text.Trim() == "")            {                MessageBox.Show("请输入会议室名称","错误",MessageBoxButtons.OK,MessageBoxIcon.Error);                return;            }            string sRoomName = textBox2.Text.Trim();            MeetingData.MdbData.SQLCom(@"Insert Into MeetingRoom (mName) Values ('" + sRoomName + "')");            MeetingRoomRefresh();        }
注意写入数据的SQL语句,由于实在太简单,都懒得用生成函数了,直接写SQL命令了。MeetingRoomRefresh()是刷新dataGridView2的数据的函数,代码就是上面提供的,我写成了一个函数而已,方便调用,和列出所有会议那个函数其实是同一回事,就绑定的数据源不一样而已。

到现在,小家伙名应该明白C#的基本用法了,就是选择合适的控件,通过绑定不同数据显示不同的内容,通过不同的事件对数据进行校验处理并写入数据库。编程没有想象中那么复杂和高大上,老鸟和菜鸟只是在控件使用熟练程度不同而已,高手也就是在算法方面比较牛,但对这些小应用来讲,在一个计算机运算能力多余的情况下,不需要考虑运算效率,以最短的时间完成项目才是正道。

下篇博文讲如何添加右键菜单,对会议进行处理。






0 0
原创粉丝点击