标签归档WinForm

澳门新葡亰官网WinFrom开发小案例

C\

支出环境:

VisualStudio2015

数据库:

SQLserver2008

次第主界面:

 澳门新葡亰官网 1

注释:

lbl标签:

次中的lbl标签:编号、人数、姓名、性别、请输入而查询的音信,这里他们就由及了证实来意,所有命名一般为默认,只修改Text文本。

程序中之lbl标签:编号后面的0,他从至了同步表中选中人员之id(编号)
人数后的0,他的来意是时刻更新表中终究人数,他们的命名要规范,后面的代码才会编更有益于。

按钮:

程序中的btn按钮:保存、重置、退出、添加、查询,要想实现他们的功效,就得双击他们接下来以中由及代码,才能够给他们功能,这里要留意按钮的命名规范。

保留按钮功能:

程序运行时,在姓名TextBox文本框中、性别TextBox文本框中,分别输入人员之人名、性别,然后按照保存按钮,人员的音讯就受抱到了数据库被。

运行图:

澳门新葡亰官网 2

 

保留按钮代码:

                if (checkinput())
                {
                using (SqlConnection con = new SqlConnection(conStr))
                {
                    con.Open();
                    string sql = "insert B(name,sex) values  (@name,@sex)";
                    SqlCommand cmd = new SqlCommand(sql, con);
                    cmd.Parameters.Add(new SqlParameter("@name", txtname.Text));
                    cmd.Parameters.Add(new SqlParameter("@sex", txtsex.Text));
                    int fh = cmd.ExecuteNonQuery();
                    if (fh > 0) MessageBox.Show("添加成功!", "系统提示", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
                    sj();
                    rs();
                }
            }

此处调用了检测输入的完整性方法:checkinput,如果姓名TextBox文本框或性别TextBox文本框中,姓名没有输入,程序会提示请输入人名,性别从不输入,程序会提示请输入性。

检测输入的完整性方法代码:

            private bool checkinput()
            {
            if (txtname.Text == null || txtname.Text == "")
            {
                MessageBox.Show("请输入姓名", "系统提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
                txtname.Focus();
                return false;
            }
            if (txtsex.Text == null || txtsex.Text == "")
            {
                MessageBox.Show("请输入性别", "系统提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
                txtsex.Focus();
                return false;
            }
            return true;
        }

信息输入不整运作效果图:

澳门新葡亰官网 3

澳门新葡亰官网 4

保留按钮的代码里还调用了,sj();rs();这简单单艺术,sj();这个主意从及了刷新长人员之音信到DGV表格中,rs();这个艺术从及了履新lbl人数标签后的数额功能,更新了总人数之多少信息。

新加一个人口运行图:

澳门新葡亰官网 5

消息输入完添加成,大家看人后的数字是:12,当自身仍确定今后,神奇之作业就是生出了!

澳门新葡亰官网 6

人口后的数字12改成了13,这里就是是以保存按钮里调用了,rs();这个办法所以才发出更新数据的效益

rs();方法的代码:

            private void rs()
           {
            using (SqlConnection con = new SqlConnection("server=.;uid=sa;pwd=sa;database=YG"))
            {
                con.Open();
                string sql = "select count(*)from B";
                SqlCommand cmd = new SqlCommand(sql, con);
                object cx = cmd.ExecuteScalar();
                //lblRS.Text = cx.ToString(); 将查询到的结果同步标签
                lblrs.Text = cx.ToString(); //将查询到的结果同步到lbl标签
            }
        }

乍保存之人口数,马上就是能够在DGV表格中找到:

澳门新葡亰官网 7

即时是因保存按钮代码里调用了,sj();这个法子,将新保存的人口信息更新至了DGV表格中。

sj();方法的代码:

            private void sj()
            {
            SqlConnection con = new SqlConnection(conStr);//创建连接对象指定连接字符串
            string sql = "select*from B";//sql查询语句
            SqlDataAdapter cx = new SqlDataAdapter(sql, con);//连接数据库并执行sql语句
            DataTable ta = new DataTable();//创建表对象
            cx.Fill(ta);//将查询的内容填充到表对象
            dataGridView1.DataSource = ta;//设置DGV表的数据来源
        }

封存按钮代码:

                if (checkinput())//调用检测输入的完整性方法
                {
                using (SqlConnection con = new SqlConnection(conStr))//创建连接对象,指定连接字符串
                {
                    con.Open();//打开连接
                    string sql = "insert B(name,sex) values  (@name,@sex)";//SQL语句,在数据库里要执行的操作
                    SqlCommand cmd = new SqlCommand(sql, con);//Cmand命名对象执行操作
                    cmd.Parameters.Add(new SqlParameter("@name", txtname.Text));//指定参数跟对应的数据匹配
                    cmd.Parameters.Add(new SqlParameter("@sex", txtsex.Text));//指定参数跟对应的数据匹配
                    int fh = cmd.ExecuteNonQuery();//ExecuteNonQuery(),这个方法在执行增、删、改的时候就调用它
                    if (fh > 0) MessageBox.Show("添加成功!", "系统提示", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
                    sj();//调用这个方法更新DGV表格中的数据
                    rs();//调用这个方法更行lbl总人数的数据
                }
            }

 SqlCommand对象的老三单道:

ExcuteScalar():

其一措施就回去查询结果集的率先行第一列

ExcuteNonQuery():

实行一个SQL语句,返回给影响之行数,这个办法要用以实践针对数据库执行长、修改、删除操作

ExcuteReader():

询问多实施大多排

重置按钮的代码:

 

            lblid.Text = "0";//lbl文本默认为0
            txtname.Clear();//将Text文本框的内容清空
            txtsex.Clear();//将Text文本框的内容清空
            txtname.Focus();//设置焦点

 

运行图:

澳门新葡亰官网 8

输入好信息后,点击重置按钮就会见清空输入的音讯

澳门新葡亰官网 9

 退出按钮的代码:

  Application.Exit();

点击退出后,程序就算见面叫关门。

累加按钮代码:

            添加人员 a = new 添加人员();//创建窗体对象
            a.ShowDialog();//以对话框模式弹出
            sj();//调用sj();这个方法来更新添加的人员数据到DGV表格中

这里丰富按钮的功力及保存按钮的功力是相近的,目的都是为了抬高人员数,只不过我们以此间举行了某些代码知识的扩张。

运行图:

澳门新葡亰官网 10

输入的消息不完整的讲话,会唤起请输入完的信息,这里为得写一个检测输入完整性的法,信息输入完后即使可点击保存了,保存按钮的代码和方面的接近,点击返回按钮后即窗体就见面关闭返回到人口管理主界面。

以SQL数据库中之多少读取到程序的DGV表格中代码:

            private void sj()
            {
            SqlConnection con = new SqlConnection(conStr);//创建连接对象指定连接字符串
            string sql = "select*from B";//sql查询语句
            SqlDataAdapter cx = new SqlDataAdapter(sql, con);//连接数据库并执行sql语句
            DataTable ta = new DataTable();//创建表对象
            cx.Fill(ta);//将查询的内容填充到表对象
            dataGridView1.DataSource = ta;//设置DGV表的数据来源
        }

其实是法在前面就是都冒出了了,当我们新增一个人口的当儿,就得调用sj();这个方式来更新DGV表格中的数额。

询问按钮代码:

            SqlConnection con = new SqlConnection(conStr);//创建连接对象指定连接字符串
            //string sql = "select * from B where name like '%"+ txtcx.Text + "%'";
            string sql = string.Format("select*from B where name like'%{0}%' or sex like'%{1}%' or id like'%{2}%'",txtcx.Text,txtcx.Text,txtcx.Text);//SQL语句根据TextBox输入的查询条件进行模糊查询
            DataTable b1 = new DataTable();//创建表对象
            SqlDataAdapter cx1 = new SqlDataAdapter(sql, con);//连接数据库并执行sql语句
            cx1.Fill(b1);//将查询的内容填充到表对象
            dataGridView1.DataSource = b1;//设置DGV表的数据来源

运行图:

澳门新葡亰官网 11

以TextBox文本框中,根据姓查询这里输入了一个:刘
 DGV表格中即使会见显得所有姓刘的人员信息

运行图:

澳门新葡亰官网 12

以TextBox文本框中,根据性查询这里输入了一个:男
澳门新葡亰官网DGV表格中显示了具备性别也男性的信。

 那么功能还多快到了,我们会发现产生矣增产,却丢失了去除跟修改的效果!!!

运行图:

澳门新葡亰官网 13

 

当此处我们得在DGV表格里加一个上下文菜单,来落实修改及去的意义。

右键菜单中改按钮的代码:

            添加人员 a = new 添加人员();//创建窗体对象
            a.Text = "修改人员";//将添加人员的窗体Text文本修改为“修改人员”
            a.Tag = dataGridView1.SelectedRows[0].Cells["id"].Value.ToString();//将选中的数据传递给修改人员窗体
            a.txtname.Text = dataGridView1.SelectedRows[0].Cells["name"].Value.ToString();//DGV表中选中的人员名字传递到修改人员窗体
            a.txtsex.Text = dataGridView1.SelectedRows[0].Cells["sex"].Value.ToString();///DGV表中选中的人员性别传递到修改人员窗体
            a.ShowDialog();//以对话框模式弹出

 运行图:

澳门新葡亰官网 14

修改人口的窗体与点击添加按钮弹来底窗体是暨一个窗体,这里只不过是因此代码修改了窗体的Text文本而已,DGV表中选中的多寡也一起到了修改人口窗体对应之Text文本框中,在此处我们特需要直接修改那些要改的地方即KO了。

运行图:

澳门新葡亰官网 15

修改人口窗体中保留按钮代码:

                    if (checkinput())
                    {
                    if (this.Text == "添加人员")
                    {
                    using (SqlConnection con = new SqlConnection(conStr))
                    {
                        con.Open();
                        string sql = "insert B(name,sex) values  (@name,@sex)";
                        SqlCommand cmd = new SqlCommand(sql, con);
                        cmd.Parameters.Add(new SqlParameter("@name", txtname.Text));
                        cmd.Parameters.Add(new SqlParameter("@sex", txtsex.Text));
                        int fh = cmd.ExecuteNonQuery();
                        if (fh > 0) MessageBox.Show("添加成功!", "系统提示", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
                        this.Close();
                    }
                    }
                    else
                    {
                    using (SqlConnection con = new SqlConnection(conStr))
                    {
                        con.Open();
                        //update<修改对象所在表> set < 修改对象 >=< 值 > where < 条件对象 >=< '条件内容' >
                       string sql = "update B set name=@name,sex=@sex where id=@id";
                        SqlCommand cmd = new SqlCommand(sql, con);
                        cmd.Parameters.Add(new SqlParameter("@id", this.Tag.ToString()));
                        cmd.Parameters.Add(new SqlParameter("@name", txtname.Text));
                        cmd.Parameters.Add(new SqlParameter("@sex", txtsex.Text));
                        int fh = cmd.ExecuteNonQuery();
                        if (fh > 0) MessageBox.Show("修改成功!", "系统提示", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
                        this.Close();
                    }
                }
            }

改人口中之保留按钮代码,跟点击添加按钮弹有之窗体中保留按钮代码一致,逻辑可能一时不便领悟,多扣几乎全方位就是熟能生巧了!

右键菜单中去除按钮的代码:

                   if (dataGridView1.SelectedRows.Count > 0)
                   {
                   string xz = dataGridView1.SelectedRows[0].Cells["id"].Value.ToString();
                   using (SqlConnection con = new SqlConnection(conStr))
                   {
                    con.Open();
                    string sql = string.Format("delete from B where id='{0}'", xz);
                    SqlCommand cmd = new SqlCommand(sql, con);
                    int fh = cmd.ExecuteNonQuery();
                    if (fh > 0)
                    {
                        MessageBox.Show("删除成功!", "系统提示", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
                        sj();
                        rs();
                    }
                    else
                    {
                        MessageBox.Show("删除失败!", "系统提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        sj();
                        rs();
                    }
                }

追加、删、改、查,的代码流程都大致相同:首先创建连接对象指定连接字符串,打开连接、sql语句以数据库里要做呀操作(增、删、改、查)、然后创建Command命令对象连接数据库并履行sql语句,定义一个变量来接方的返值,增、删、改操作时,调用ExecuteNonQuer这个措施,查询操作时,一般调用的是ExcuteReader这个方式,要召开的操作不同,调用的方法吗会见不同,定义变量时也得定义匹配这个办法的变量。

运行图:

澳门新葡亰官网 16

澳门新葡亰官网 17

一个简单易行的先后案例就是讲解结束了,写就首博客也非告什么利益,只是梦想会带来吃新家一个启迪作用,也许多年自此效仿了大多派别语言的亲善,连最初的C#编程语言结构逻辑思考全都忘光了,还可在博客上回顾一下,只要您一直于。

Navi.Soft31.任务管理器(定时同步+数据收集)

1系简介

1.1效应简述

于广大之软件分类中,有几好像的软件不是特别重点,但也不行关键。它们多每隔一段时间需要实行有职责之软件,我们给其定时类软件;还有一样种软件是采网页遭到之数码,我们被它收集类软件。

以产品是任务管理器,包括上述2种植软件

一块服务,可以因安排好之时空距离执行任务。可以各隔一段时间,也得以以有时刻接触执行

集服务,可以搜集指定页面的数量,用于深数目解析。可因网址直接采访,也得可视化采集(如:淘宝被自之订单,就是需要报到才会收集)

1.2运行条件

.NET Framework 4.0

1.3应用办法

双击软件图标,打开登录页面,验证成功后弹有要图1-1所出示

图片 1

图1-1

1.4产品亮点

l 定时模块,任务类包括:间隔时间和时间接触

l 采集模块,支持可视化采集与非可视化采集

l 完善的日志模块帮助问题之定势以及缓解

2一块服务

2.1部署并项

图片 2

倘定义好合项,这些共同项可保存至内存中,也堪储存于数据库中。用于定义有哪任务需要定时执行

2.2周转并项

图片 3

如果达到图所示

1,
记录并项的开始与了结时,定时执行次数,还有配备起,如:间隔时间,时间点等

2, 最下的日志用于出口同步项之操作结果

2.3势必时邮件

凡负程序各间隔定时间,向系统管理员发送邮件。以通知管理员系统运行如常

2.4布局集项

凡是采集模块范围,下有些详细描述

3数额搜集

3.1主界面

图片 4

图3-1

若达到图所示

1.
如约产品已经嵌入几单采访模板,如:博客园、糗事百科、淘宝网和1688(需登录后而视化采集)

2.
中选某个采集模板,点击:创建,相当给创造了之模板的一个实例(可同时创造多个)

  1. 重新选中某个实例,点击:开始。实现集数据
3.2创造实例

图片 5

3.3从头搜集

图片 6

如果达到图所示

点击开始后,实现数量收集

3.4采访结果

图片 7

3.5可是视化采集

图片 8

倘若可视化采集,点击:开始之时段,会自动弹来可视化采集页面(注:有的要报到)

3.5.1调试

图片 9

l 取分页数:是因取得有略分页,如下图所示

图片 10

l 采集当页:是指仅采集当前页数据,如下图所示

图片 11

l 下一样页:是凭当前页采集完成后,直接沾:下同样页按钮,实现页面翻转

3.5.2报到帐户

凡凭借登录的款户及密码,可径直复制。当然,需要超前安排好才行

3.5.3采集

征集是依用调试中之计,实现对持有页面的采集。步骤如下

a. 先抱有微分页

b. 循环从第1页开始征集

c. 时页采集成功后,再触发下一页按钮,采集第2页,直至所有页面都集完成

3.6组件化开发

图片 12

无可视化采集,还是未可视化采集。均已经实现组件化开发。如:采集页面就来一个,不同之募集模板,只需要传入不同的参数即可兑现

4FAQ

4.1FAQ1

问:若360康宁警卫开启时,会弹出是否同意此程序运行,如图8-1所显示

图片 13

图8-1

答:选择:一直允许运行(加入白名单)

4.2FAQ2

问:可视化采集页面中之浏览器控件用之凡哪位?

报:可视化采集控件采用的是微信自带的WebBrowser控件,在Win7或Win10系统被,它需要修改注册,来保证使用的IE内核与系统的IE内核保持一致

5后记

本着随产品感兴趣的,可以加以我微信号(xiyang1011要13867408830)私聊

 

本人的博客即将搬运一头到腾讯云+社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan

开源组件NanUI一周年 – 使用HTML/CSS/JS来构建.Net Winform应用程序界面

NanUI是什么

NanUI据悉ChromiumFX项目进展付出,它会吃你当你的Winform应用程序中行使HTML5/CSS3/Javascript等网页技术来显现用户界面(类似Electron)。同时NanUI提供了原生窗口与定制化的无标题栏无边框窗口,你会利用任何底网页技术来计划和呈现你的应用程序界面。

图片 1

开源措施

NanUI基给MIT协议,所以无你下NanUI来开发商业类型或者开源、免费项目都用非让另限制,只需要遵循协议文本遇规定之,在你的软件中声称使用了NanUI技术即可。

铺天盖地文档

  • NanUI简介
  • 始于利用NanUI
  • 包并行使内嵌式的HTML/CSS/JS资源
  • 使网页来统筹总体窗口
  • 怎实现C#及Javascript的互通信
  • 如何处理NanUI中之下载过程 – DonwloadHandler的使用(待更新。。。)
  • 哪处理NanUI中的弹窗过程 – LifeSpanHandler的采用(待更新。。。)
  • 哪些决定Javascript对话框 – JsDialogHandler的运用(待更新。。。)
  • 由定义资源处理程序 (待更新。。。)

源码和保

乃可以经GitHub获取NanUI的源码以及示例代码,稳定版的NanUI包通过Nuget进行分发。NanUI支持.NET4.0/4.5/4.6/4.7及创新版本的Windows窗体应用。

取源码

git clone https://github.com/NetDimension/NanUI.git

Nuget包管理器

正规版(CEF 3.2987.1601.gf035232 / Chromium 57.0.2987.133

PM> Install-Package NetDimension.NanUI

WindowXP版本(CEF 3.2526.1366.g8617e7c / Chromium 47.0.2526.80

PM> Install-Package NetDimension.NanUI.XP

引进下Nuget包管理器安装NanUI程序集将自动安装相应的CEF依赖项,一键安装方便使用。

怎么编译源码和示范

编译当前版本的NanUI需要支持C#7.0语法的编译器,推荐的编译工具有且只来Visual
Studio 2017。

哪以

初始化NanUI

namespace TestApplication
{
    using NetDimension.NanUI;
    static class Program
    {
        [STAThread]
        static void Main(string[] args)
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);

            //初始化CEF: 设置CEF的相关Path
            //如果要使用Nuget自动下载的fx文件夹结构,需要手动指定各个文件夹的路径

            var result = Bootstrap.Load(PlatformArch.Auto, System.IO.Path.Combine(Application.StartupPath, "fx"), System.IO.Path.Combine(Application.StartupPath, "fx\\Resources"), System.IO.Path.Combine(Application.StartupPath, "fx\\Resources\\locales"));

            if (result)
            {
                // Load embedded html/css resources in assembly.
                Bootstrap.RegisterAssemblyResources(System.Reflection.Assembly.GetExecutingAssembly());

                Application.Run(new Form1());

                Application.Exit();
            }

        }
    }
}

采取原生的窗口样式来行使NanUI

namespace TestApplication
{
    public partial class Form1 : Formium

    {

        public Form1()
            //Load embedded resource index.html and not set form to no border style by the second parameter.
            : base("http://res.app.local/index.html", false)
        {
            InitializeComponent();
        }
    }
}

使用无边框模式来运NanUI

namespace TestApplication
{
    public partial class Form1 : Formium

    {

        public Form1()
            //Load embedded resource index.html and set form to no border style by igrone the second parameter or set it to true.
            : base("http://res.app.local/index.html")
        {
            InitializeComponent();
        }
    }
}

请注意:倘利用Visual Studio
2015或者又低之版开发暨调剂NanUI应用程序,需要在路性质的调试选项卡着关闭“启用VS承载进程”选项,否则调试时将出现页面不加载白屏的景况。如图所示:

图片 2

社群和声援

GitHub
https://github.com/NetDimension/NanUI/

交流群QQ群
521854872

扶植作者

设若你喜欢自己的工作,并且期望NanUI持续的前进,请对NanUI项目开展补助为之来鼓励与支撑自己连续NanUI的开支工作。你得运用微信或者支付宝来围观下的亚维码进行资助。

图片 3

有点豆苗疫苗辅助搜索

  今年好事连连一次,先是生子后是买车。但是事情有好的一头也发出麻烦的单方面,为了为孩子好点的单,首先在打小儿疫苗者为孩子掉打针,情愿付费来打五联合疫苗,相比免费之疫苗要掉打8针剂,或许就是因这样子的想法的原由,挺多父母啊是同等的想法导致各地的深圳地区五联疫苗严重缺苗,一到要打疫苗的岁月段的时,整天抱在多少豆苗各种搜索社康的疫苗库存。来来回回折腾,小豆苗没有批量招来,只能沿着个挨个的寻找。最近空闲的庸俗,索性做了只细的帮带搜索软件。请各位看官给跟见,不知道博客园能无克放下载软件,后续有要之爱人可以留Email地址,楼主见了会面挨个发送共享斯不大的扶助软件。毕竟大家伙当父母之还不利,能享受帮点是一些咔嚓。。。下面我来演示下软件之功力点:

 

  首先用户要以有些豆苗上登记个账号,因楼主当时内需自己所待功能,就从不在报上面做文章了。

 

个人档案 1

即是软件主体力量。

 

输入账号之后状态栏会提示:

个人档案 2

 

下一场设置你要是物色的基准,例如(地区、寻找的疫苗)

个人档案 3

 

接下来操作加载数据,第一加以载数据,系统会自动读取数据缓存,也为不影响其他人的应用,避免造成小豆苗app服务器的下压力,楼主设置了下24钟头更新一破缓存数据。

个人档案 4

 

 选择而扣押之卫生院库存,双击医院名称:

个人档案 5

网会自行加载医院库存详细数据。。。。或者安装好了询问配置,点击搜索疫苗按钮

个人档案 6

 双击医院

个人档案 7

 

软件会管欠地方有,有库存的疫苗社康罗列出来。方便大家伙一次次去有点豆苗不停止点击查阅医院。。。
 列表上面还起社康名称、地址、以及联系方式;个人建议大家齐声在错过你有所去的社康个人档案之前,打下联系电话确定是否生没有产生库存;

  楼主深刻经历,因为急打疫苗看到社康在软件方面显示有库存,打他们之联系电话又自不接,索性直接通往过去,结果可想而知。。。。楼主分享些经验,只想帮那些初为人父的同班减少些烦心事罢了。

  楼主文笔不好,没有发挥好的远在请求大家伙谅解下。同时要来需要的朋友,留下email,或者叫楼主发email,楼主一并分享。。。。楼主的email:l.y188@qq.com
 

   附:可以翻全国之社康数据。。。

 

javascript + sql编写SQL客户端工具tabris

祝福大家2018新年快乐,

不久前意识了一个新意的剧本JtSQL(java编写)

开源地址也:https://github.com/noear/JtSQL

JtSQL 特点:
*.结合了JS、SQL、模板理念;
*.保持了JS和SQL的语法高亮(利于DBA审核);
*.方便统一保管、部署、运行
*.像存储过程同样,提供当前达到下文及变量支持;
*.像SQL客户端工具一样,即时编写即经常运行;
*.像定制统计程序一样,提供经过与逻辑控制能力;
*.服务端运行(转变误会变成客户端运行啊…) 

 

图片 1

实在在工作中总会遇到这样的题目

常常去拉sql,有时候一词sql执行打不定
就得分多次sql,

形容sql写的心累。把JavaScript
和 sql 结合起来的确非常赞。能缓解一直困扰的问题

以这个邪创意点自己吧来了一个家伙 我取名也tabris脚本工具

开源地址为:https://github.com/yuzd/ClearScript.Manager

(ps:大家发出建议尽管提)

特色:

1 包含JtSQL的持有特性

2 利用微软的
ClearScript V8 engine

详尽请参考:https://microsoft.github.io/ClearScript/Tutorial/FAQtorial.html?from=timeline&isappinstalled=0

ClearScript很强大可以做到c# 与 JavaScript 互通

3 把功能模块化
目前早已落实的3只重大之模块

  1. 施行http请求处理模块

  2. 日记输出处理模块

  3. 实践sql处理模块.

  4. js代码智能提醒tabris模块

图片 2

图片 3

然后想用外的机能都得扩展外模块

 

  1. 代码编写采用CodeMirror
    ,写js代码智能提醒

 

 

脚来一个动图感受下吧

因以下场景也示范

 

 图片 4

 

 

图片 5

 

 图片 6

 

包装的sql log http 三百般组件 在编辑器上的法子能代码智能提醒 

图片 7

 

图片 8

 

图片 9

 

//DB处理器
var db = this.tabris.create('SQL', {
  name:'testorm',
  type:'mysql'
});

//http处理器
var http = this.tabris.create('HTTP', {
  method:'GET'
});

//log处理器
var log = this.tabris.create('LOG', {
  trace:true
});

db.delete('delete from child_district');

//从district表里面获取所有城市的Code
var get_district_sql = "select Code from district";

var district_code_list = db.query(get_district_sql);

for (var index = 0; index < district_code_list.length; index++) {
    getChildDistrictAndInsertToDb(district_code_list[index].Code);
}


//远程获取
function getChildDistrictAndInsertToDb(parentCode){
  log.info(parentCode);
  var re = http.getJson({
    url:'https://fuwu.sf-express.com/service/address/newAddr/getNewSubAddress?parentCode=' + parentCode
  });
  if(!re.subAddressList || !re.subAddressList.length) return;
  for (var index = 0; index < re.subAddressList.length; index++) {
    var child = re.subAddressList[index];
    var insertSql = "insert into child_district (Name,Code,DataChange_LastTime) VALUES('"+ child.distCnName +"','"+ child.distCode +"',now())";
    var insertResult = db.insert(insertSql)
    if(insertResult!=1){
      log.error(child.distCnName + '插入db失败!');
    }else{
      log.info(child.distCnName + '插入db成功!')
    }
  }
}

 

客户端下载

最新版:https://github.com/yuzd/ClearScript.Manager/tree/master/src/Tabris.Winform/Release

体检套餐管理体系 — List单列集合

 

本文章为List<T>单列集合开发品种,如要 Dictionary<K,V>双列聚开发的之路,请到楼主博客园寻找

博客网址:http://www.cnblogs.com/lsy131479/

 

窗体

            澳门新葡亰官网 1

 

 

一.首先定义项目类

 /// <summary>
    /// 项目类
    /// </summary>
public class HealthCheckItem
    {
        //项目描述
        private string description;
        //项目名称
        private string name;
        //项目价格
        private int price;

        //无参构造
        public HealthCheckItem()
        {
        }

        //有参构造
        public HealthCheckItem(string description, string name, int price)
        {
            this.description = description;
            this.name = name;
            this.price = price;
        }

        public string Description { get => description; set => description = value; }
        public string Name { get => name; set => name = value; }
        public int Price { get => price; set => price = value; }
    }

二.定义套餐类

  /// <summary>
    /// 套餐类
    /// </summary>
   public class HealthCheckSet
    {
        //套餐名
        private string name;
        //套餐总价格
        private int price;
        //存储套餐内的项目
        private List<HealthCheckItem> items = new List<HealthCheckItem>();

        //无参构造
        public HealthCheckSet()
        {
        }
        //有参构造
        public HealthCheckSet(string name)
        {
            this.name = name;

        }



        public string Name { get => name; set => name = value; }
        public int Price { get => price; set => price = value; }
        public List<HealthCheckItem> Items { get => items; set => items = value; }
    }

 三.主窗体代码

  /// <summary>
        /// 体检套餐管理系统 -- List<T>单列集合
        /// </summary>
        public FrmMain()
        {
            InitializeComponent();
        }

        //存储套餐类的集合
        List<HealthCheckSet> Set = new List<HealthCheckSet>();
        private void FrmMain_Load(object sender, EventArgs e)
        {
            //删除多余的列
            this.dgvHealth.AutoGenerateColumns = false;
            //删除多余的行
            this.dgvHealth.AllowUserToAddRows = false;

            /*
             * 初始化套餐类集合
             * 调用刷新datagridview的方法
             * */
            HealthCheckSet set0 = new HealthCheckSet("请选择");
            HealthCheckSet set1 = new HealthCheckSet("入学体检");
            Set.Add(set0);
            Set.Add(set1);
            AddExamCbo();
        }

        //存储所有套餐内项目的集合
        public List<HealthCheckItem> allItems = new List<HealthCheckItem>();

        public void AddPhyCbo()
        {
            //清空集合
            allItems.Clear();

            //集合初始化
            HealthCheckItem item1 = new HealthCheckItem("用于检查身高。", "身高", 5);
            HealthCheckItem item2 = new HealthCheckItem("用于检查体重。", "体重", 5);
            HealthCheckItem item3 = new HealthCheckItem("用于检查肝功能。", "肝功能", 50);
            HealthCheckItem item4 = new HealthCheckItem("用于检查视力。", "视力", 5);
            HealthCheckItem item5 = new HealthCheckItem("用于检查听力。", "听力", 5);
            HealthCheckItem item6 = new HealthCheckItem("用于检查B超。", "B超", 80);
            HealthCheckItem item7 = new HealthCheckItem("用于检查心电图。", "心电图", 100);
            allItems.AddRange(new HealthCheckItem[] { item1, item2, item3, item4, item5, item6, item7 });
            /*
             * 绑定刷新项目下拉框
             * */
            this.cboPhy.DisplayMember = "name";
            this.cboPhy.DataSource = new BindingList<HealthCheckItem>(allItems);
        }

        public void AddExamCbo()
        {
            /*
             * 绑定刷新套餐下拉框
             * */
            this.cboExams.DataSource = new BindingList<HealthCheckSet>(Set); ;
            this.cboExams.DisplayMember = "name";
        }

        private void cboExams_SelectedIndexChanged(object sender, EventArgs e)
        {
            //调用绑定刷新datagridview方法
            AddDgv();
            //调用刷新金额的方法
            CalcPrice();
            //调用删除按钮状态方法
            Btn();

            /*
             * 如果不是请选择也就是0下标还原初始状态(按钮为禁用,项目下拉框无项目)
             * 反之,按钮解除禁用状态,项目下拉框从新填充数据
             * */
            if (this.cboExams.SelectedIndex > 0)
            {
                AddPhyCbo();
                this.btnAdd.Enabled = true;
                this.lblNames.Text = cboExams.Text;
            }
            else
            {
                this.btnAdd.Enabled = false;
                this.btnDel.Enabled = false;
                this.lblNames.Text = cboExams.Text;
                this.cboPhy.DataSource = null;

            }
        }

        public void AddDgv()
        {
            /*
             * 将选中套餐的项绑定刷新datagridview
             * */
            foreach (HealthCheckSet item in Set)
            {
                if (item.Name.Equals(cboExams.Text))
                {
                    this.dgvHealth.DataSource = new BindingList<HealthCheckItem>(item.Items);
                    return;
                }
            }
        }

        public void item()
        {
            foreach (HealthCheckSet item in Set)
            {
                if (item.Name.Equals(cboExams.Text))
                {
                    foreach (HealthCheckItem it in item.Items)
                    {
                        if (it.Name.Equals(this.cboPhy.Text))
                        {
                            /*
                             * 判定是否已存在要添加的项
                             * */
                            MessageBox.Show("您已添加过此项!");
                            return;
                        }
                    }
                    foreach (HealthCheckItem it in allItems)
                    {
                        if (it.Name.Equals(this.cboPhy.Text))
                        {
                            /*
                             * 如果通过验证,可以添加,则将该项添加到集合中,并刷新datagridview与套餐价格
                             * */
                            item.Items.Add(it);
                            AddDgv();
                            CalcPrice();
                            MessageBox.Show("添加成功!");

                            return;
                        }
                    }
                    return;
                }
            }
        }
        public void CalcPrice()
        {
            foreach (HealthCheckSet item in Set)
            {
                if (item.Name.Equals(cboExams.Text))
                {
                    /*
                     * 计算套餐金额
                     * */
                    item.Price = 0;
                    foreach (HealthCheckItem it in item.Items)
                    {
                        item.Price += it.Price;
                    }
                    //将套餐金额赋值给控件,并显示
                    this.lblPrices.Text = item.Price.ToString();
                    return;
                }
            }

        }
        private void btnAdd_Click(object sender, EventArgs e)
        {
            //添加套餐项目

            item();
            Btn();
        }

        private void btnNew_Click(object sender, EventArgs e)
        {
            //非空验证
            if (txtNewName.Text == "" || txtNewName.Text == null)
            {
                MessageBox.Show("请输入套餐名称!");
                return;
            }

            /*
             * 将通过验证的套餐名称添加到集合并刷新套餐下拉框
             * */
            HealthCheckSet set = new HealthCheckSet(this.txtNewName.Text);
            Set.Add(set);

            AddExamCbo();
            this.cboExams.Text = this.txtNewName.Text;
            MessageBox.Show("添加成功!");
        }

        private void btnDel_Click(object sender, EventArgs e)
        {
            foreach (HealthCheckSet item in Set)
            {
                if (item.Name.Equals(cboExams.Text))
                {
                    for (int i = 0; i < item.Items.Count; i++)
                    {
                        if (item.Items[i].Name.Equals(this.dgvHealth.SelectedRows[0].Cells[0].Value.ToString()))
                        {
                            /*
                             * 删除要删除的项并刷新相关控件
                             * */
                            item.Items.RemoveAt(i);
                            AddDgv();
                            CalcPrice();
                            this.lblPrices.Text = item.Price.ToString();
                            MessageBox.Show("删除成功!");
                            Btn();
                            return;
                        }
                    }
                    return;
                }
            }
        }
        public void Btn()
        {
            foreach (HealthCheckSet item in Set)
            {
                if (item.Name.Equals(cboExams.Text))
                {
                    /*
                     * 判断删除按钮的状态,如果集合里有数据为启用,无数据为禁用
                     * */
                    if (item.Items.Count > 0)
                    {
                        this.btnDel.Enabled = true;
                    }
                    else
                    {
                        this.btnDel.Enabled = false;
                    }
                    return;
                }
            }

        }
    }

 

网站地图xml地图