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 ...
随机推荐
- mac系统,鼠标移动太慢
to check your speed: defaults read -g com.apple.mouse.scaling to set your speed defaults write -g co ...
- 如何在MONO 3D寻找最短路路径
前段时间有个客户说他们想在我们的3D的机房中找从A点到B点的最短路径,然而在2D中确实有很多成熟的寻路算法,其中A*是最为常见的,而这个Demo也是用的A*算法,以下计算的是从左上角到右下角的最短路径 ...
- 折线分割平面(hdoj 2050,动态规划递推)
Problem Description 我们看到过很多直线分割平面的题目,今天的这个题目稍微有些变化,我们要求的是n条折线分割平面的最大数目.比如,一条折线可以将平面分成两部分,两条折线最多可以将平面 ...
- JavaScript--小白入门篇2
一.布尔值和关系运算符.逻辑运算符 1.1 布尔值 我们上篇文章说了,学习了两种变量的类型数值型.字符串型. 实际上,还有很多变量的类型.我们今天再学习一种,叫做“布尔类型”. 数值型里面的值 ...
- P2041 分裂游戏
P2041 分裂游戏 手推$n=3$是无解的,推断$n>=3$是无解的 证明略,这是道结论题. #include<iostream> #include<cstdio> # ...
- python_ 学习笔记(hello world)
python中的循环语句 循环语句均可以尾随一个else语句块,该块再条件为false后执行一次 如果使用break跳出则不执行. for it in [1,2,3,4]: print(it,end= ...
- 关于python字典中文显示的处理办法
最近工作中遇到字典包含中文,显示\uxxxx的问题,怎么转换都无法输入正常的中文:{"gc": "\u4eba\u751f\u7f8e\u597d", &quo ...
- web & Rich Text Editor
web & Rich Text Editor 富文本编辑器 http://www.wangeditor.com/ https://github.com/wangfupeng1988/wangE ...
- HDU 1249 三角形的分割
可以将三角形的三条边一条一条加进图形中观察 假设添加第n个三角形 前n-1个三角形将区域划分为sum[n-1] 第n个三角形每条边最多能经过前n-1个三角形每条三角形的两条边 , 一条边切完增加了 2 ...
- Uva12657 Boxes in a Line
题目链接:传送门 分析:每次操作都会花费大量时间,显然我们只需要关注每个元素的左边是啥,右边是啥就够了,那么用双向链表,l[i]表示i左边的数,r[i]表示i右边的数,每次操作模拟一下数组的变化就好了 ...