C#中使用MVC架构(四)
六、实现视图层NewsManager
- 用户登录
登录按键处理事件
private void button1_Click(object sender, EventArgs e)
{
UserLogin login = new UserLogin();
String name = this.userNameTbx.Text;
String pwd = this.pwdTbx.Text;
User user=login.login(name,pwd);
if (user!=null)
{
if (user.Uname.Equals("admin"))
{
BackManage backManage = new BackManage();
backManage.UserLogin = user;
backManage.Show();
}else
{
MainForm mainForm = new MainForm();
mainForm.Show();
}
this.Visible = false;
}
else
{
msgLbl.Text = "提示:用户或密码不正确!";
msgLbl.Visible = true;
}
if (count > 3)
{
MessageBox.Show("输入非法超过三次,系统将关闭!", CAPTION, MessageBoxButtons.OK, MessageBoxIcon.Warning);
Application.Exit();
}
else
{
count++;
}
}
- 后台管理
窗体作为视图,访问BLL层的基本业务接口。baseService接口对象作为业务层总中介,在用户点击管理对象的子菜单时,指向各个具体的业务实现类,实现视图与用户业务的解耦。
private void 用户管理ToolStripMenuItem_Click(object sender, EventArgs e)
{
//设置菜单选中状态
用户管理ToolStripMenuItem.Checked =! 用户管理ToolStripMenuItem.Checked;
栏目管理ToolStripMenuItem.Checked = false;
新闻管理ToolStripMenuItem.Checked = false;
objLbl.Text = "当前对象:用户管理";
UserService user=new UserService();
baseService = user;//接口引用用户服务类对象
bdService = user; //抽象类引用用户服务类对象
}
baseService接口指向不同的业务对象,将响应不同业务,即接口响应多态的实现。需要判断当前的baseService接口对象指向了哪一个业务类,判断时,初始化对应业务的添加窗体,并向窗体传递委托事件,传递添加数据的委托
private void 增加ToolStripMenuItem_Click(object sender, EventArgs e)
{
toolStripStatusLabel3.Text = "添加数据。。。";
//打开编辑窗口
if (baseService is UserService)
{
UserForm userForm = new UserForm();
//向用户窗体传递委托事件
userForm.adet = baseService.add;
userForm.ShowDialog();//显示为模态对话框
}
if (baseService is TopicService)
{
TopicForm topic = new TopicForm();
//传递委托事件
topic.adet = baseService.add;
topic.ShowDialog();
}
if(baseService is NewsService)
{
NewsForm newsForm = new NewsForm();
//传递委托事件
newsForm.adet = baseService.add;
newsForm.ShowDialog();
}
toolStripStatusLabel3.Text = bdService.Msg;
}
总体代码如下:
public partial class BackManage : Form {
IBaseService baseService;//引用基本业务接口
BaseDataService bdService;
MODEL.User userLogin=null;//保存登录用户对象
private void BackManage_Load(object sender, EventArgs e)
{
loginLbl.Text = userLogin.Uname +":登录";
//绑定事件,用户在点击对象管理后,调用列表事件
this.用户管理ToolStripMenuItem.Click += this.列表ToolStripMenuItem_Click;
this.栏目管理ToolStripMenuItem.Click += this.列表ToolStripMenuItem_Click;
this.新闻管理ToolStripMenuItem.Click += this.列表ToolStripMenuItem_Click;
//给操作crud绑定列表事件
this.增加ToolStripMenuItem.Click += this.列表ToolStripMenuItem_Click;
this.删除ToolStripMenuItem.Click += this.列表ToolStripMenuItem_Click;
this.修改ToolStripMenuItem.Click += this.列表ToolStripMenuItem_Click;
this.toolStripStatusLabel2.Text = "登录时间:" + DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss");
this.toolStripStatusLabel3.Text = "操作状态";
}
//****************设置菜单选中状态*****************
private void 用户管理ToolStripMenuItem_Click(object sender, EventArgs e)
{
//设置菜单选中状态
用户管理ToolStripMenuItem.Checked =! 用户管理ToolStripMenuItem.Checked;
栏目管理ToolStripMenuItem.Checked = false;
新闻管理ToolStripMenuItem.Checked = false;
objLbl.Text = "当前对象:用户管理";
UserService user=new UserService();
baseService = user;//接口引用用户服务类对象
bdService = user; //抽象类引用用户服务类对象
}
private void 栏目管理ToolStripMenuItem_Click(object sender, EventArgs e)
{
栏目管理ToolStripMenuItem.Checked = !栏目管理ToolStripMenuItem.Checked;
用户管理ToolStripMenuItem.Checked = false;
新闻管理ToolStripMenuItem.Checked = false;
objLbl.Text = "当前对象:栏目管理";
TopicService topic = new TopicService();//接口引用标题栏对象
baseService = topic;
}
private void 新闻管理ToolStripMenuItem_Click(object sender, EventArgs e)
{
新闻管理ToolStripMenuItem.Checked = ! 新闻管理ToolStripMenuItem.Checked;
用户管理ToolStripMenuItem.Checked = false;
栏目管理ToolStripMenuItem.Checked = false;
objLbl.Text = "当前对象:新闻管理";
baseService = new NewsService();//接口引用新闻帖类对象
}
/*****************************************管理操作**********************************************************/
private void 列表ToolStripMenuItem_Click(object sender, EventArgs e)
{
BindingSource bs=baseService.list();
dataGridView1.DataSource = bs;
dataGridView1.ReadOnly = true;
bindingNavigator1.BindingSource =bs;
}
private void 增加ToolStripMenuItem_Click(object sender, EventArgs e)
{
toolStripStatusLabel3.Text = "添加数据。。。";
//打开编辑窗口
if (baseService is UserService)
{
UserForm userForm = new UserForm();
//向用户窗体传递委托事件
userForm.adet = baseService.add;
userForm.ShowDialog();//显示为模态对话框
}
if (baseService is TopicService)
{
TopicForm topic = new TopicForm();
//传递委托事件
topic.adet = baseService.add;
topic.ShowDialog();
}
if(baseService is NewsService)
{
NewsForm newsForm = new NewsForm();
//传递委托事件
newsForm.adet = baseService.add;
newsForm.ShowDialog();
}
toolStripStatusLabel3.Text = bdService.Msg;
}
private void 删除ToolStripMenuItem_Click(object sender, EventArgs e)
{
toolStripStatusLabel3.Text = "删除数据。。。";
//int index =Convert.ToInt32(bindingNavigatorPositionItem.Text);//需要减1
int index2 = dataGridView1.CurrentRow.Index;
int id = (int)dataGridView1.Rows[index2].Cells[0].Value;
baseService.delete(id);
toolStripStatusLabel3.Text = bdService.Msg;
}
private void 查询ToolStripMenuItem_Click(object sender, EventArgs e)
{
dataGridView1.DataSource = null;
toolStripStatusLabel3.Text = "查询数据。。。";
String name = searchTbx.Text;
if (name!=null && name.Length > 0)
{
BindingSource bs = baseService.getByName(name);
dataGridView1.DataSource = bs;
dataGridView1.ReadOnly = true;
dataGridView1.Refresh();
//给控件绑定数据源
bindingNavigator1.BindingSource = bs;
}
else
{
toolStripStatusLabel3.Text = "请先输入查询的数据!";
}
toolStripStatusLabel3.Text = bdService.Msg;
}
private void 修改ToolStripMenuItem_Click(object sender, EventArgs e)
{
toolStripStatusLabel3.Text = "修改数据。。。";
//打开修改窗口
if (baseService is UserService)
{
UserForm userForm = new UserForm();
userForm.Text = "编辑用户";
//取当前记录的索引
int index2 = dataGridView1.CurrentRow.Index;
int id = (int)dataGridView1.Rows[index2].Cells[0].Value;
//取得编辑的对象
User user = (User)baseService.getById(id);
//传递用户窗体编的数据
userForm.user = user;
//向用户窗体添加委托事件
userForm.adet = baseService.edit;
userForm.ShowDialog();//显示为模态对话框
}
if (baseService is TopicService)
{
TopicForm topicForm = new TopicForm();
topicForm.Text = "编辑栏目";
//取当前记录的索引
int index2 = dataGridView1.CurrentRow.Index;
int id = (int)dataGridView1.Rows[index2].Cells[0].Value;
Topic topic = (Topic)baseService.getById(id);
//传递编辑数据
topicForm.topic = topic;
//向用户窗体添加委托事件
topicForm.adet = baseService.edit;
//显示为模态对话框
topicForm.ShowDialog();
}
if (baseService is NewsService)
{
NewsForm newsForm = new NewsForm();
newsForm.Text = "编辑新闻";
//取当前记录的索引
int index2 = dataGridView1.CurrentRow.Index;
int id = (int)dataGridView1.Rows[index2].Cells[0].Value;
News news = (News)baseService.getById(id);
//传递编辑数据
newsForm.news = news;
//向用户窗体添加委托事件
newsForm.adet = baseService.edit;
newsForm.ShowDialog();
}
toolStripStatusLabel3.Text = bdService.Msg;
}
private void 关闭ToolStripMenuItem_Click(object sender, EventArgs e)
{
toolStripStatusLabel3.Text = "退出系统。。。";
System.Environment.Exit(0);
}
}
3、新闻添加更新操作
public partial class NewsForm : Form
{
//声明委托
public delegate void AddEdit(News news);
public AddEdit adet;//定义委托对象
public News news;
TopicService topicService;
int nid;
public NewsForm()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
int nid=this.nid;
int ntid=topicCmbox.SelectedIndex;
String ntitle=titleTbx.Text;
String nauthor=authorTbx.Text;
String npicpath=this.pictureBox1.ImageLocation.ToString();
String ncontent=contextRchTxt.Text;
String summary=summaryTbx.Text;
News news = new News(nid, 2, ntitle, nauthor, new DateTime(), npicpath, ncontent, new DateTime(), summary);
//调用委托,添加或编辑数据
adet(news);
}
private void NewsForm_Load(object sender, EventArgs e)
{
topicService = new TopicService();
BindingSource bs=topicService.list();
topicCmbox.ValueMember = "序号";//tid 的别名
topicCmbox.DisplayMember = "栏目名称"; //tname的别名
topicCmbox.DataSource = bs;
topicCmbox.SelectedIndex = 0;//自动选中列表第一项
this.pictureBox1.Load("C:\\Users\\zgd\\Pictures\\book2.jpg");
if (news != null)
{
nid = news.Nid;
titleTbx.Text = news.Ntitle;
authorTbx.Text = news.Nauthor;
topicCmbox.SelectedIndex = news.Ntid;
summaryTbx.Text = news.Summary;
contextRchTxt.Text = news.Ncontent;
this.pictureBox1.ImageLocation = news.Npicpath;
}
}
private void button4_Click(object sender, EventArgs e)
{
openFileDialog1.InitialDirectory = ".";
openFileDialog1.Filter = "图片格式(*.jpg)|*.jpg|png文件(*.png)|*.png|位图文件(*.bmp)|*.bmp|所有文件(*.*)|*.*";
openFileDialog1.Multiselect = false;
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
string filePath = openFileDialog1.FileName;
int pos = filePath.LastIndexOf("\\");
string fileName = filePath.Substring(pos + 1);
pictureBox1.ImageLocation = filePath;
using (Stream stream = openFileDialog1.OpenFile())
{
using (FileStream fs = new FileStream(@"../../img/" + fileName, FileMode.CreateNew))
{
stream.CopyTo(fs);
fs.Flush();
}
}
}
}
private void button5_Click(object sender, EventArgs e)
{
openFileDialog1.InitialDirectory = ".";
openFileDialog1.Filter = "所有文件(*.*)|*.*";
openFileDialog1.ShowDialog();
if (openFileDialog1.FileName != String.Empty)
{
String pathname = openFileDialog1.FileName;
this.pictureBox1.Load(pathname);
}
}
}
4、标题添加更新操作
public partial class TopicForm : Form
{
//声明添加编辑委托
public delegate void AddEdit(Topic topic);
public AddEdit adet;//定义委托对象
public Topic topic;
int tid;
public TopicForm()
{
InitializeComponent();
}
private void button2_Click(object sender, EventArgs e)
{
this.Close();
}
private void button1_Click(object sender, EventArgs e) {
String name = nameTbx.Text;
Topic newTopic = new Topic(this.tid, name);
//调用委托执行对应的增加或修改方法
adet(topic);
this.Close();
}
private void TopicForm_Load(object sender, EventArgs e)
{
if (topic != null)
{
//numTbx.Text = Convert.ToString(topic.Tid);
nameTbx.Text = topic.Tname;
tid = topic.Tid;
}
}
}
本文地址:https://blog.csdn.net/yytrobot/article/details/107340826
下一篇: NODE.JS中的异步理解
推荐阅读
-
Python中logging日志的四个等级和使用
-
ASP.NET MVC中Log4Net记录错误日志的使用
-
【转载】C#中ArrayList集合类使用RemoveAt方法移除指定索引的元素
-
【转载】C#中ArrayList集合类使用Remove方法指定元素对象
-
JavaEE基础day02 1.定义Java中的变量 四类八种 2.变量定义和使用的注意事项 3.数据类型的转换、强制数据类型转换4.算数运算符、比较运算符、逻辑运算符、赋值运算符、三元运算符
-
C#中事件的定义和使用
-
四种php中webservice实现的简单架构方法及实例
-
ExtJs 4 中的MVC应用架构_html/css_WEB-ITnose
-
C#类中属性与成员变量的使用小结
-
ASP.NET MVC中图表控件的使用方法