桦山涧

桦山涧
Asp.net ---->知识改变命运!
随笔 - 259, 文章 - 3, 评论 - 174, 阅读 - 48万
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

2016年4月8日

 先上效果图如下:

1、本公式自定义配置计算器的实现基于DataTable.Compute()的用法,该函数用法详细参考文档;本示例支持条件公式、计算公式的配置

2、界面样式

 1 <style type="text/css">
 2         .p {
 3             width: 40px;
 4             height: 40px;
 5             background-color: green;
 6             border: 1px solid #0e0808;
 7             float: left;
 8             text-align: center;
 9             line-height: 40px;
10             color: white;
11             font-weight: bold;
12             cursor: pointer;
13         }
14         .pblack {
15             width: 100px;
16         }
17         .param {
18             width: 90%;
19             height: 40px;
20             background-color: green;
21             border: 1px solid #0e0808;
22             float: left;
23             text-align: center;
24             line-height: 40px;
25             color: white;
26             font-weight: bold;
27             cursor: pointer;
28         }
29     </style>

3、界面脚本

  1 <script type="text/javascript">
  2 
  3         var KeyList = new Array();//公式对外文本
  4         var KeyValueList = new Array();//公司的对内编码
  5 
  6         jQuery(document).ready(function () {
  7 
  8             //选公式
  9             jQuery(".p").click(function () {
 10 
 11                 jQuery("#TextAreaFormula").focus();//
 12                 
 13                 var inputText = jQuery(this).text();//
 14                 var inputValue = jQuery(this).data("value");//
 15 
 16                 //1、空格键
 17                 if (inputText.length == 0 || inputText == "") {
 18                     inputText = " ";
 19                     inputValue = " ";
 20                 }
 21 
 22                 //非数字键
 23                 if ("0123456789".indexOf(String(inputText)) < 0) {
 24                     if ("C←".indexOf(String(inputText)) >= 0) {
 25                         switch (String(inputText)) {
 26                             case "C"://清空键
 27                                 KeyList = [];
 28                                 KeyValueList = [];
 29 
 30                                 jQuery("#TextAreaFormula").val("");
 31                                 jQuery("#TextAreaFormulaCode").val("");
 32 
 33                                 jQuery("#TextAreaFormula").focus();
 34                                 return;
 35                                 break;
 36                             case ""://退格键
 37                                 //
 38                                 KeyList.pop();
 39                                 var strChanged = "";
 40                                 for (var i = 0; i < KeyList.length; i++) {
 41                                     strChanged += String(KeyList[i]);
 42                                 }
 43                                 jQuery("#TextAreaFormula").val(strChanged.trimEnd());
 44                                 jQuery("#TextAreaFormula").focus();
 45 
 46                                 //
 47                                 KeyValueList.pop();
 48                                 var strvalueCharged = "";
 49                                 for (var i = 0; i < KeyValueList.length; i++) {
 50                                     strvalueCharged += String(KeyValueList[i]);
 51                                 }
 52                                 jQuery("#TextAreaFormulaCode").val(strvalueCharged.trimEnd());
 53                                 return;
 54                                 break;
 55                             //case "And":
 56                             //    inputText = " " + "&&" + " ";
 57                             //    inputValue = " " + "&&" + " ";
 58                             //    break;
 59                             //case "Or":
 60                             //    inputText = " " + "||" + " ";
 61                             //    inputValue = " " + "||" + " ";
 62                             //    break;
 63                             default:
 64                                 break;
 65                         }
 66                     }
 67                     else if ("." == String(inputText)) {
 68 
 69                     }
 70                     else { //非清空\退格\小数点键的其他键
 71                         inputText = " " + inputText + " ";
 72                         inputValue = " " + inputValue + " ";
 73                     }
 74                 }
 75 
 76                 //数字和小数点-键
 77                 var HaveExistStr = jQuery("#TextAreaFormula").val();
 78                 jQuery("#TextAreaFormula").val(HaveExistStr + inputText);
 79                 KeyList.push(inputText);
 80                 jQuery("#TextAreaFormula").focus();
 81 
 82                 //数字和小数点-值
 83                 var HaveExistStrValue = jQuery("#TextAreaFormulaCode").val();
 84                 jQuery("#TextAreaFormulaCode").val(HaveExistStrValue + inputValue);
 85                 KeyValueList.push(inputValue);
 86 
 87             });
 88 
 89             //选参数
 90             jQuery(".param").click(function () {
 91                 jQuery("#TextAreaFormula").focus();
 92 
 93                 var inputText = jQuery(this).text();
 94                 var inputValue = jQuery(this).data("value");
 95                 inputText = " [" + inputText + "] ";
 96                 inputValue = " [" + inputValue + "] ";
 97 
 98                 var HaveExistStr = jQuery("#TextAreaFormula").val();
 99                 jQuery("#TextAreaFormula").val(HaveExistStr.trimEnd() + inputText);
100                 KeyList.push(inputText);
101                 jQuery("#TextAreaFormula").focus();
102 
103                 var HaveExistStrValue = jQuery("#TextAreaFormulaCode").val();
104                 jQuery("#TextAreaFormulaCode").val(HaveExistStrValue.trimEnd() + inputValue);
105                 KeyValueList.push(inputValue);
106 
107             });
108 
109         });
110 
111         //去除字符串尾部空格或指定字符   
112         String.prototype.trimEnd = function (s) {
113             s = (s ? s : "\\s");
114             s = ("(" + s + ")");
115             var reg_trimEnd = new RegExp(s + "*$", "g");
116             return this.replace(reg_trimEnd, "");
117         };
118 
119 
120     </script>

4、界面HTML源码

 1     <form id="form1" runat="server">
 2         
 3         <div style="float:left;width:90%;border:1px solid #ff0000;margin:5px;padding:20px;">
 4             <table>
 5                 <tr>
 6                     <td colspan="2">
 7                         <textarea id="TextAreaFormula" cols="80" rows="2" style="float:left;width:680px;" readonly="readonly" runat="server"></textarea>
 8                         <input id="TextAreaFormulaCode" type="text" style="float:left;width:681px;" readonly="readonly" runat="server"/>
 9                     </td>
10                 </tr>
11                 <tr>
12                     <td style="width:100px;vertical-align:top;">
13                         <div class="param" data-value="BasicSalary">基本工资</div>
14                         <div class="param" data-value="OTDays">加班天数</div>
15                         <div class="param" data-value="LengthOfService">工龄</div>
16                     </td>
17                     <td style="width:280px;">
18                         <div class="p" data-value="(">(</div><div class="p" data-value=")">)</div>
19                         <div class="p" data-value="+">+</div><div class="p" data-value="-">-</div>
20                         <div class="p" data-value="*">*</div><div class="p" data-value="/">/</div>
21                         <div class="p" data-value="0">0</div><div class="p" data-value="1">1</div>
22                         <div class="p" data-value="2">2</div><div class="p" data-value="3">3</div>
23                         <div class="p" data-value="4">4</div><div class="p" data-value="5">5</div>
24                         <div class="p" data-value="6">6</div><div class="p" data-value="7">7</div>
25                         <div class="p" data-value="8">8</div><div class="p" data-value="9">9</div>
26                         <div class="p" data-value=">">></div><div class="p" data-value=">=">>=</div>
27                         <div class="p" data-value="=">=</div>
28                         <div class="p" data-value="<"><</div><div class="p" data-value="<="><=</div>
29                         <div class="p" data-value=".">.</div>
30                         <div class="p" data-value="And">And</div>
31                         <div class="p" data-value="Or">Or</div>
32                         <div class="p pblack" data-value=""></div>
33                         <div class="p" data-value="C">C</div>
34                         <div class="p" data-value="←"></div>
35                     </td>
36                 </tr>
37                 <tr>
38                     <td>
39                         
40                     </td>
41                     <td>
42                         <table>
43                             <tr>
44                                 <td>基本工资金额:</td>
45                                 <td>
46                                     <asp:TextBox ID="TextBoxBasicSalary" runat="server">2000</asp:TextBox>
47                                 </td>
48                             </tr>
49                             <tr>
50                                 <td>加班天数:</td>
51                                 <td><asp:TextBox ID="TextBoxOTDays" runat="server">20</asp:TextBox></td>
52                             </tr>
53                             <tr>
54                                 <td>工龄(年):</td>
55                                 <td><asp:TextBox ID="TextBoxLengthOfService" runat="server">10</asp:TextBox></td>
56                             </tr>
57                             <tr>
58                                 <td colspan="2">
59                                     <asp:Button ID="Button1" runat="server" Text="配置公式→输入参数值→计算公式的结果" OnClick="Button1_Click" />
60                                 </td>
61                             </tr>
62                         </table>
63                         
64                         <br/>
65                         
66                         <br/>
67                         
68                         <br/>
69                         
70                     </td>
71                 </tr>
72             </table>
73         </div>
74     </form>

 

5、后台代码

 1     /// <summary>
 2     /// 计算
 3     /// </summary>
 4     public class ParamModel {
 5 
 6         /// <summary>
 7         /// 基本工资
 8         /// </summary>
 9         public decimal BasicSalary { get; set; }
10 
11         /// <summary>
12         /// 加班天数
13         /// </summary>
14         public decimal OTDays { get; set; }
15 
16         /// <summary>
17         /// 工龄
18         /// </summary>
19         public decimal LengthOfService { get; set; }
20 
21         //还可继续扩充,也可以考虑使用动态类
22     }
 1         /// <summary>
 2         /// 实例源码
 3         /// </summary>
 4         /// <param name="sender"></param>
 5         /// <param name="e"></param>
 6         protected void Button1_Click(object sender, EventArgs e)
 7         {
 8             var ParamModel = new ParamModel();
 9             ParamModel.BasicSalary = Convert.ToDecimal(this.TextBoxBasicSalary.Text ?? "0");
10             ParamModel.OTDays = Convert.ToDecimal(this.TextBoxOTDays.Text ?? "0");
11             ParamModel.LengthOfService = Convert.ToDecimal(this.TextBoxLengthOfService.Text ?? "0");
12 
13 
14             DataTable eval = new DataTable();
15             var formulaText = this.TextAreaFormulaCode.Value;//公式
16             var Str = formulaText;
17             var StrParam = string.Empty;
18             foreach (var PropertyInfo in ParamModel.GetType().GetProperties())
19             {
20                 if (formulaText.IndexOf("[" + PropertyInfo.Name + "]") >= 0)
21                 {
22                     Str = Str.Replace(("[" + PropertyInfo.Name + "]"), "(" + PropertyInfo.GetValue(ParamModel, null).ToString() + ")");//将表达式中的参数Code替换为实际的值
23                     StrParam += string.Format("[{0}]={1},", PropertyInfo.Name, PropertyInfo.GetValue(ParamModel, null).ToString());//表达式中各参数的值
24                 }
25             }
26             object result = null;
27             try
28             {
29                 result = eval.Compute(Str, "");//文本表达式的运行结果
30             }
31             catch(Exception ex)
32             {
33                 Response.Write("公式配置有误,请重新配置!具体错误:" + ex.Message+"<br/>");
34                 return;
35             }
36             StrParam = StrParam.TrimEnd(',');//各参数的值
37             Response.Write(string.Format(
38                 "公式含义:{4}<br/>"
39                 + "公式编码:{0}<br/>"
40                 + "参数取值:<br/>"
41                 + "{3}<br/>"
42                 + "公式解析:{1} <br/>"
43                 + "计算结果:{2}<br/>",
44                 formulaText,
45                 Str,
46                 Convert.ToString(result),
47                 StrParam,
48                 this.TextAreaFormula.Value));
49 
50         }


6、扩展

在此基础上可以进一步发挥的空间很大

》结合存储设计如数据库等,参数可以动态加载参数;

》诸如参数自定义,自定义的参数再次被用作新参数的配置,参数嵌套使用,可以配置出强大而复杂的计算公式以及条件公式

》结合存储设计再结合C#的动态类,可以使得参数对应的类也动态化;

》当然简单级别的计算并不完全需要面向对象的类的设计,完全使用存储设计,所有参数可以完全依赖如数据库或其他存储方式如XML等来提供

 

posted @ 2016-04-08 16:21 桦林 阅读(5128) 评论(0) 推荐(2) 编辑

2015年8月28日

摘要: 写自用软件系统时查找到的树列表控件过于庸余,样式难调,故自写一套完整的简易js_TreeTable控件,使用时简单的添加自定义的样式效果即可,特此发布第一个版本。源码如下:/* * HuashanlinJsTree 1.0.1 * * Copyright (c) 2015 Huashanlin (h... 阅读全文

posted @ 2015-08-28 16:02 桦林 阅读(434) 评论(0) 推荐(0) 编辑

2015年2月12日

摘要: [原]常用sqlserver数据库使用sql语句 阅读全文

posted @ 2015-02-12 17:46 桦林 阅读(8201) 评论(0) 推荐(0) 编辑

摘要: 对于应用程序行业领域来说,涉及到Net框架的,在众多支持大型项目的商用ORM框架中,使用最多的目前了解的主要有三款: 1、NHibernate(从Java版移植来的Net版)、 2、微软的EF、 3、还有就是今天提到的LLBLGen 阅读全文

posted @ 2015-02-12 17:12 桦林 阅读(8111) 评论(0) 推荐(1) 编辑

2013年4月2日

摘要: 几个开源协议的简介 阅读全文

posted @ 2013-04-02 15:53 桦林 阅读(341) 评论(1) 推荐(0) 编辑

2013年1月12日

摘要: //1、字符串(如"2010-3-1"格式)转换成Date类型function ChangeStr2Date(str) { return new Date(Date.parse(str.replace(/-/g, "/"))); }//2、Json数据按照某一字段排序的方法function JsonSort() {//测试Json数据var obj = [{ a: change2Date("2012-1-7"), b: 55, c: 66 }, { a: change2Date("2012-1-5"), b: 22 阅读全文

posted @ 2013-01-12 18:14 桦林 阅读(15454) 评论(0) 推荐(0) 编辑

2013年1月10日

摘要: SELECT REPLACE( REPLACE((SELECT Name FROM common.Common_Setup_CompanyData T WHERE CompanyID<39 FOR XML AUTO),'<T Name="',','),'"/>',',')DECLARE @dd NVARCHAR(1000)SET @dd=( SELECT REPLACE((SELECT Name FROM common.Common_Setup_CompanyData T WHERE Comp 阅读全文

posted @ 2013-01-10 19:34 桦林 阅读(445) 评论(0) 推荐(0) 编辑

2012年11月28日

摘要: declare @str nvarchar(50);set @str='462,464,2';select @str as '字符串'select len(@str) as '字符长度'select charindex(',',@str,1) as '第一个逗号的索引值'select LEFT(@str,charindex(',',@str,1)-1) as '第一个值'select SUBSTRING(@str,charindex(',',@str,1)+1,len 阅读全文

posted @ 2012-11-28 14:05 桦林 阅读(28775) 评论(1) 推荐(1) 编辑

2012年11月6日

摘要: 基于sqlserver数据库用C#winform写一个微型orm的代码生成器,期间用到要查询ms数据库的表结构,写一个脚本记录下:selectSO.nameasTableName,SC.nameasTableCloumn,ST.nameasDataType,(SELECTCOUNT(1)ASIs_PKFROMsyscolumnsJOINsysindexkeysONsyscolumns.id=sysindexkeys.idANDsyscolumns.colid=sysindexkeys.colidJOINsysindexesONsyscolumns.id=sysindexes.idANDsysi 阅读全文

posted @ 2012-11-06 09:44 桦林 阅读(2727) 评论(0) 推荐(0) 编辑

2011年6月27日

摘要: IIS6.0的WEB服务扩展中“Internet数据库连接器”到底是做什么用的。 阅读全文

posted @ 2011-06-27 22:28 桦林 阅读(2326) 评论(0) 推荐(0) 编辑

2011年5月31日

摘要: 本代码只是业余时间无聊写着试试,用WebBrowser组件模拟人工运行搜索引擎自动点击搜索结果的实验 这是网络中盛传的提高搜索引擎点击率的一种方式,当然属于作弊,不推荐各位使用。另外这种方式的性能不佳,往往因为网络及本地机器的原因中途当机。当然如果只是写这游戏一下那是无妨。这里只是提供了其中的一种原理,方法还有很多。如果此方式继续优化详细写下去的话可能需要涉及到vpn定时更改ip地址到问题,当然现在即便是vpn也有办法逆向找到原始的ip地址。 阅读全文

posted @ 2011-05-31 16:13 桦林 阅读(3223) 评论(0) 推荐(0) 编辑

2011年5月3日

摘要: CDN (Content Distribution Network):内容分发网络,是构筑在现有的Internet上的一种先进的流量分配网络。工作于网络层与应用层之间(如下CDN加速示意图)。此概念最早于1998年由美国麻省理工大学提出,是一套能够实现用户就近访问的网络解决方案。 阅读全文

posted @ 2011-05-03 11:31 桦林 阅读(527) 评论(0) 推荐(0) 编辑

2011年4月29日

摘要: 网洛管理员应该具备哪些知识和技能 网络管理的实施者一般称其为网络管理员,因此本文所谈网络管理需要的知识,其实也就是指作为一名合格的网络管理员,所应具备的各类知识与技能。 大的方面来说,网络的规划设计,网络设备的招投标、系统集成处理等事项是考验网络管理员综合素质的重要方面;而细到具体事务来说,选择和採购好的网络设备,设备的安装、配置和调试,保证局域网正常、稳定地运行,合理运用网络管理软件等等,都是需要掌握的。有人将网络管理员比作企业网络的「勤杂工」,就充分说明了网络管理的繁重与必要性。 阅读全文

posted @ 2011-04-29 10:39 桦林 阅读(695) 评论(0) 推荐(0) 编辑

2011年4月25日

摘要: sql处理带分隔符的字符串数据 阅读全文

posted @ 2011-04-25 18:26 桦林 阅读(5539) 评论(1) 推荐(1) 编辑

2011年4月21日

摘要: 搜索引擎营销(SEM)   SEM是Search Engine Marketing的缩写,中文意思是搜索引擎营销。SEM是一种新的网络营销形式。SEM所做的就是全面而有效的利用搜索引擎来进行网络营销和推广。SEM追求最高的性价比,以最小的投入,获最大的来自搜索引擎的访问量,并产生商业价值。   现在随着互联网的深入生活,SEM也是随之而来,方便人们的生活,例如现在大家都普遍使用的B2C网站,还有网上缴费等等,很多都运用了SEM。 阅读全文

posted @ 2011-04-21 09:14 桦林 阅读(854) 评论(0) 推荐(0) 编辑

2010年6月18日

摘要: 淘宝网,是一个在线商品数量突破一亿,日均成交额超过两亿元人民币,注册用户接近八千万的大型电子商务网站,是亚洲最大的购物网站。那么对于淘宝网这样大规模的一个网站,我猜想大家一定会非常关心整个网站都采用了什么样的技术、产品和架构,也会很想了解在淘宝网中是否采用了开源的软件或者是完全采用的商业软件。那么下面我就简单的介绍一下淘宝网中应用的开源软件。 阅读全文

posted @ 2010-06-18 11:01 桦林 阅读(1331) 评论(3) 推荐(0) 编辑

2008年12月19日

摘要: 发现浏览器安全漏洞后做什么 阅读全文

posted @ 2008-12-19 11:28 桦林 阅读(470) 评论(0) 推荐(0) 编辑

2008年12月3日

摘要: 微软Silverlight是一个跨浏览器、跨客户平台的技术,能够设计、开发和发布有多媒体体验与富交互(RIA,Rich Interface Application)的网络交互程序。 阅读全文

posted @ 2008-12-03 13:31 桦林 阅读(890) 评论(0) 推荐(0) 编辑

摘要: 2008年末纪念:回顾改变Web的十大事记 阅读全文

posted @ 2008-12-03 12:53 桦林 阅读(424) 评论(0) 推荐(0) 编辑

2008年8月19日

摘要: Spry框架实现XML分页 阅读全文

posted @ 2008-08-19 16:02 桦林 阅读(1499) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示