C# 学习笔记 三层架构系列(控件一)
下面是我两周的学习总结:这是我写给自己的,如果哪位朋友有幸看到这篇文章就是缘分。如果所说的内容不对,就请纠正。勿喷!!!
想要将两周的学习知识通过文字、通过代码、通过图片储备起来,以防自己那天思维短路可以再次方便自己回顾。
下面第一节我将要学习三层架构基础东西
C#结构分为三层:1、UI层:就是Winform的框架集,方便用户对控件的操作与对控件的事件处理等。
2、BLL层:用于自己是JAVA出身,做东西喜欢和JAVA比较,我认为这层就是java的接口或service,用来声明void和有返回值的接口。用于在UI层调用相应的接口,并在DAL层实现所要执行的操作。
3、DAL层:对我来说就是JAVA中的IMPL实现,有返回值方法和无返回值方法等。也可在这里做事务处理等(后期再聊)。
百度:--------------
3层架构是一种“客户端-服务器”架构,在此架构中用户接口,商业逻辑,数据保存以及数据访问被设计为独立的模块。主要有3个层面,第一层(表现层,GUI层),第二层(商业对象,商业逻辑层),第三层(数据访问层)。这些层可以单独开发,单独测试。
----------------------
下面将做的是对控件的处理:
1、 拖入三个复选框在页面上,对name进行简单的命名
2、下载对三个复选框做状态的更改 ‘选中、非选中’。
首先在加载窗口中定义
ArrayList tab1_ArrayList_CheckBox = new ArrayList();
tab1_ArrayList_CheckBox.Add(checkBox1_jjxx);
tab1_ArrayList_CheckBox.Add(checkBox2_kwjlj);
tab1_ArrayList_CheckBox.Add(checkBox3_jg);
// 通过[QueryFrmSetControlINFO]存储过程 查询出Operator所有数据 CheckStutas,BaseName,TabIndex
DataSet ds = setControl_BLL.QueryFrmSetControlINFO();
GetTabArrayListCheckBox(ds, tab1_ArrayList_CheckBox);
//GetTabArrayListCheckBox(ds, tab1_ArrayList_CheckBox);
private void GetTabArrayListCheckBox(DataSet ds, ArrayList tabArrayList)
{
// 遍历CheckBox复选框集合
for (var i = 0; i < tabArrayList.Count; i++)
{
CheckBox CheckBox = (CheckBox)tabArrayList[i];
// 遍历Operator表中的记录 进行列名称比较
for (var j = 0; j < ds.Tables[0].Rows.Count; j++)
{
// 比较页面上字段与数据库属性是否相同
if (CheckBox.Text == ds.Tables[0].Rows[j]["BaseName"].ToString())
{
Boolean checkBox_Checked_Flag = ds.Tables[0].Rows[j]["CheckStutas"].ToString() == "True" ? true : false;
CheckBox.Checked = checkBox_Checked_Flag;
break;
}
}
}
}
这段代码就意味着数据库中会有对应的数据表存储的三个复选框中的数据,会保存三个复选框的数值和选中状态。
之后会通过窗体加载事件将三个复选框的checked的状态通过名称做比较,如果true代表选中。
--------------
下面将通过按钮保存三个复选框的数据状态等。
通过按钮单击事件:保存数据
private void button_OK_Click(object sender, EventArgs e)
{
//Tab1
//int index = 1;
//int index = int.Parse(tabPage1.Name.Substring(tabPage1.Text.Length - 1));
int index1 = int.Parse(tabPage1.Name.Substring(tabPage1.Name.Length - 1));
UpdateOperatorCheckBoxCheckStutas(tab1_ArrayList_CheckBox, index1);
}
private void UpdateOperatorCheckBoxCheckStutas(ArrayList tab_ArrayList_CheckBox, int index)
{
int Check_Stutas;
string Check_Title;
// 遍历CheckBox复选框集合
for (var i = 0; i < tab_ArrayList_CheckBox.Count; i++)
{
CheckBox CheckBox = (CheckBox)tab_ArrayList_CheckBox[i];
if (CheckBox.Checked)
{
Check_Stutas = 1;
Check_Title = CheckBox.Text;
}
else
{
Check_Stutas = 0;
Check_Title = CheckBox.Text;
}
//更新Operator表中CheckStatus,BaseName两个字段
UpdateCheckBox(Check_Stutas, Check_Title, index);
}
}
。。。。。。。。。。。。。。。。割了 上面是对CheckBox的加载和处理
第二内容:是对groupbox的处理
1、如通过按钮来控制groupbox容器的显示与否。
数据库中数据及状态:
ArrayList arrayList1_GroupBox = new ArrayList();
private void Frmsetting_Load(object sender, EventArgs e)
{
// 通过[GetFrmSettingINFO]存储过程 查询出Operator所有数据
DataSet ds = frmsetting_BLL.Frmsetting_Operator_BLL();
// 将GroupBox加载到ArrayList集合
arrayList1_GroupBox.Add(groupBox2_jjxx);
arrayList1_GroupBox.Add(groupBox1_kwjlj);
arrayList1_GroupBox.Add(groupBox4_jj);
// 传参ArrayList 进行遍历
GetArrayList_GroupBox(ds, arrayList1_GroupBox);
// 通过[GetFrmSettingINFO]存储过程 查询出Operator所有数据
// 传参ArrayList 进行遍历
private void GetArrayList_GroupBox(DataSet ds, ArrayList alist)
{
// 遍历ArrayList中存储的个数
for (int i = 0; i < alist.Count; i++)
{
GroupBox groupBox = (GroupBox)alist[i];
// 遍历数据库表Operator 中数据的个数
for (var j = 0; j < ds.Tables[0].Rows.Count; j++)
{
// 名称和数据库表Operator表中属性做比较
if (groupBox.Text == ds.Tables[0].Rows[j]["BaseName"].ToString())
{
Boolean groupBox_Visible = ds.Tables[0].Rows[j]["CheckStutas"].ToString() == "True" ? true : false;
groupBox.Enabled = groupBox_Visible;
break;
}
}
}
}
在数据库中查询groupbox的属性 之后通过判断来决定是否groupbox的容器控件是否可用。
....................................................割了。。。。。。。。。。。。
--------------------------------------下面是对textbox控件的梳理
在页面上拖动几个textbox控件在界面上
修改名称,之后通过名称来保存数据到数据库中
UI层代码:
private void button_CaoZuo_ok_Click(object sender, EventArgs e)
{
// tabpage1 操作
string caoZuoZhe = txt_CZZ.Text;
string jianCeDiDian = txt_JCDD.Text;
string caiJiShiJian = txt_CJSJ.Text;
if (caoZuoZhe != "" || jianCeDiDian != "" || caiJiShiJian != "")
{
frmsetting_BLL.Insert_Frmsetting_BaseInfo(caoZuoZhe, jianCeDiDian, caiJiShiJian);
}
}
BLL层:
public void Insert_Frmsetting_BaseInfo(string caoZuoZhe, string jianCeDiDian, string caiJiShiJian)
{
Frmsetting_DAL.InsertFrmSetting_BaseInfo_INFO(caoZuoZhe, jianCeDiDian, caiJiShiJian);
}
DAL层:
#region "插入BaseInfo信息"
/// <summary>
///插入BaseInfo表数据
/// </summary>
/// <param name="caoZuoZhe">Operatorer</param>
/// <param name="caoZuoZhe">Address</param>
/// <param name="caoZuoZhe">CollectionTime</param>
public static void InsertFrmSetting_BaseInfo_INFO(string caoZuoZhe, string jianCeDiDian, string caiJiShiJian)
{
string sqlCommand = "InsertFrmSettingBaseInfo";
SqlParameter[] param ={
new SqlParameter("@caoZuoZhe",SqlDbType.VarChar,50),
new SqlParameter("@jianCeDiDian",SqlDbType.VarChar,50),
new SqlParameter("@caiJiShiJian",SqlDbType.VarChar,50)
};
param[0].Value = caoZuoZhe;
param[1].Value = jianCeDiDian;
param[2].Value = caiJiShiJian;
SqlHelper.ExecuteNonQuery(GHGD.Conn.Conn.SqlConn, CommandType.StoredProcedure, sqlCommand, param);
}
#endregion
以上代码就是c# 三层架构的简单代码。
。。。。。。。。。。。。。。。。。。割了
-------------------------------------下面是对ComboBox 下拉框控件的操作:
对下拉框的操作有两种方式:
一种是在其通过手动方式添加ComboBox 下拉项;另一种是通过字典表中数据之后通过限制条件添加ComboBox 下拉项中。
我记录的是通过字典表加入添加ComboBox 下拉项数据:上代码
数据库数据:
窗体加载事件:
// tabpage2
// 温度
string tabpage2_str = "温度";
DataSet tabpage2_dsComboBox = dic_Bll.GetDic(tabpage2_str);
DataTable dt = new DataTable();
dt = tabpage2_dsComboBox.Tables[0];
comboBox6_wendu.DataSource = dt;
comboBox6_wendu.DisplayMember = "DICName";
comboBox6_wendu.ValueMember = "ID";
// 湿度
string tabpage2_str2 = "湿度";
DataSet tabpage2_dsComboBox2 = dic_Bll.GetDic(tabpage2_str2);
DataTable dt2 = new DataTable();
dt2 = tabpage2_dsComboBox2.Tables[0];
comboBox7_shidu.DataSource = dt2;
comboBox7_shidu.DisplayMember = "DICName";
comboBox7_shidu.ValueMember = "ID";
以上代码是将字典表数据加载到ComboBox下拉框中:
下面代码是保存ComboBox数据到数据库中:
UI:
private void button4_YingJian_ok_Click(object sender, EventArgs e)
{
int wendu = comboBox6_wendu.SelectedIndex;
int shidu = comboBox7_shidu.SelectedIndex;
// tabpage2 数据
frmsetting_BLL.Insert_Frmsetting_SensorInfo(wendu, shidu);
}
BLL:
public void Insert_Frmsetting_SensorInfo(int wendu, int shidu)
{
Frmsetting_DAL.Insert_Frmsetting_SensorInfo(wendu, shidu);
}
DAL:
#region "插入Sensor表信息"
/// <summary>
///插入Sensor表信息
/// </summary>
/// <param name=""></param>
/// <param name=""></param>
public static void Insert_Frmsetting_SensorInfo(int wendu, int shidu)
{
string sqlCommand = "Insert_Frmsetting_SensorInfo";
SqlParameter[] param ={
new SqlParameter("@wendu",SqlDbType.Int),
new SqlParameter("@shidu",SqlDbType.Int)
};
param[0].Value = wendu;
param[1].Value = shidu;
SqlHelper.ExecuteNonQuery(GHGD.Conn.Conn.SqlConn, CommandType.StoredProcedure, sqlCommand, param);
}
#endregion
..................。。。。。。。。。。。。。。。。割了
以上是对几个简单的控件的使用。
C# 学习笔记 三层架构系列(控件一)的更多相关文章
- Duilib学习笔记《03》— 控件使用
在前面已经对duilib有个一个基本的了解,并且创建了简单的空白窗体.这仅仅只是一个开始,如何去创建一个绚丽多彩的界面呢?这就需要一些控件元素(按钮.文本框.列表框等等)来完善. 一. Duilib控 ...
- 第六周学习笔记,vc各类控件的输入输出
6w学习笔记 vc控件的输入输出 单选按钮 当单击 RadioButton 控件时,其 Checked 属性设置为 true,并且调用 Click 事件处理程序.当 Checked 属性的值更改时,将 ...
- c#学习笔记之使用 TableLayoutPanel 控件设置窗体布局
使用 TableLayoutPanel 控件设置窗体布局 在 Visual Studio IDE 左侧,找到“工具箱”选项卡. 选择“工具箱”选项卡,随即将显示工具箱.(或者,在菜单栏上,依次选择“视 ...
- ODAC(V9.5.15) 学习笔记(二)控件列表
ODAC的控件有26个,简单介绍如下: TOraSession 管理Oracle的连接 TOraQuery 使用SQL进行数据获取,自动将更新提交数据库 TSmartQuery 在处理字 ...
- IOS开发学习笔记019-动态创建控件
动态创建控件 一.按钮 二.文本输入框 三.lable标签 注意: 只是简单的拖拽控件会毁了你,所以最好还是手动通过代码创建控件. 如果要通过代码生成按钮的话,可以在系统自带的函数viewDidLoa ...
- Java学习笔记——三层架构
Layer: UI层: user interface 用户接口层 Biz层: service business login layer 业务逻辑层 DAO层: Date Access Obje ...
- 学习笔记13_第三方js控件&EasyUI使用
第三方UI包使用思路: 1.先映入各种JS包,包含JS版本包,第三方CSS包,第三方主JS包,第三方语言包. 2.确定要做什么,是对话框还是表格.3.根据Demo和目的,在<body>内, ...
- Android Studio 学习笔记(三):简单控件及实例
控件.组件.插件概念区分 说到控件,就不得不区分一些概念. 控件(Control):编程中用到的部件 组件(Component):软件的组成部分 插件(plugin): 应用程序中已经预留接口的组件 ...
- <WP8开发学习笔记>修改panorama全景控件的标题的大小
panorama(全景)控件非常具有WinPhone特色,但是那个巨大的标题许多时候会让人觉得违和.怎么修改它呢? 最开始想到的是加一个FontSize,结果毫无影响.╮(╯-╰)╭ <phon ...
随机推荐
- java虚拟机(二)--类加载机制和双亲委派模型
一.类的生命周期 加载(Loading).验证(Verification).准备(Preparation).解析(Resolution).初始化(Initialization).使用(Using).卸 ...
- 使用SELECT语句检索数据
使用SELECT语句检索数据select指令适用于SQL数据库SELECT 语句用于从数据库中选取数据.(指令不分大小写,选择的值除名字和一些有特殊意义的字符可不分大小写,from结束时一定要加;) ...
- svn汉化包安装无效的解决办法
下载svn汉化包要和对应的svn客户端版本对应,否则安装无效, 在安装前要想将svn安装目录下的languages目录下的文件全部删除 还有一点要注意的是 汉化包安装要放在svn安装目录下进行安装,它 ...
- Code128条形码如何计算其宽度?如何得出其校验位?
原文链接 Code128条形码是一个非常高密的字母数字条码,能够存储需要的编码数据,它可以编码所有128个ASCII码字符,它使用最少的空间. 在Code128符号体系中,每个数据字符编码都是由11个 ...
- 转来的——python webdriver自动化测试初步印象——转来的
python webdriver自动化测试初步印象 以下示例演示启动firefox,浏览google.com,搜索Cheese,等待搜索结果,然后打印出搜索结果页的标题 from selenium i ...
- Django DTL模板语法中的循环的笔记
for...in...笔记: for...in...标签: for...in...类似于Python中的for...in....可以遍历列表.元组.字符串.字典等一切可以遍历的对象.示例代码如下: { ...
- Python基础(四) 基础拾遗、数据类型进阶
一.基础拾遗 (一).变量作用域 外层变量,可以被内层变量直接调用:内层变量,无法被外层变量使用.这种说法在其它语言中适用,在python中除了栈以外,正常的变量作用域,只要执行声明并在内存中存在,该 ...
- Docker学习总结(18)——阿里超大规模Docker化之路
12月6-7日,由阿里巴巴集团.阿里巴巴技术发展部.阿里云云栖社区联合主办,以"2016双11技术创新"为主题的阿里巴巴技术论坛上,阿里巴巴研究员林昊分享了阿里超大规模Docker ...
- @requestbody---接受前端传json对象并绑定javabean
@requestbody---接受前端传json对象并绑定javabean----https://blog.csdn.net/ljxbbss/article/details/74452326 最近代码 ...
- poj 3253 Fence Repair(priority_queue)
Fence Repair Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 40465 Accepted: 13229 De ...