图  1

一、从图1发现了什么问题呢?

答案:1.参数传的的太多了;2.另外注释也没写好。

说明:一个方法中,传参数的数量最好不要超过5个。

应该采用:struct或class,或一个字典类都行。其中:字典类:Dictionary,存键值对的集合类。这个一次再进一步补充说明;

struct:

由于最近的项目里面用到了这个,在此说明下:

来做一个新增数据功能:

主要有三层:1. Web 2. BusinessRules 下有 DTO 和 Logic 3.DBService

一、 Web:

1.前台代码:

<form id="form1" runat="server" submitdisabledcontrols="true"
onkeydown="if(event.keyCode==13){return false;}">

<input type="hidden" id="hd_newCount" runat="server" />//隐藏域

<asp:Button ID="btnSubmit" runat="server" Text="submit" CssClass="button5" OnClientClick="return savePageValue();"

OnClick="btnSubmit_Click" />//提交按钮

//绑定数据的代码:

<tittle:CustomDataGrid ID="grdResult" runat="server" DataKeyField="PartID" AutoGenerateColumns="False"Sort="False" CellPadding="0" FreezeColumns="0" FreezeHeader="False" GridHeight="240px"FreezeRows="0" PageSize="20" AllowSorting="false" OnItemDataBound="grdResult_ItemDataBound">

<PagerStyle HorizontalAlign="Center" Mode="NumericPages"></PagerStyle>
<Columns>
<asp:TemplateColumn>
<HeaderStyle HorizontalAlign="Center" Width="20px"></HeaderStyle>
<ItemStyle HorizontalAlign="Center"></ItemStyle>
<ItemTemplate>
<input type="checkbox" id="chkl" disabled="disabled" runat="server" style="width: 100%"
value='<%# Eval("PartID") %>' /></ItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn>
<HeaderStyle Wrap="False" HorizontalAlign="Center" Width="200px"></HeaderStyle>
<ItemStyle Wrap="False" HorizontalAlign="Center"></ItemStyle>
<HeaderTemplate>部品代码</HeaderTemplate>
<ItemTemplate>
<asp:Label ID="lblMaterialCode" runat="server" Text='<%# Eval("Materialcode")%>'></asp:Label>
</ItemTemplate>
<FooterStyle Wrap="False"></FooterStyle>
</asp:TemplateColumn>
<asp:TemplateColumn>
<HeaderStyle Wrap="False" HorizontalAlign="Center" Width="200px"></HeaderStyle>
<ItemStyle Wrap="False" HorizontalAlign="Center"></ItemStyle>
<HeaderTemplate>部品名称</HeaderTemplate>
<ItemTemplate>
<asp:Label ID="lblMaterialName" runat="server" Text='<%# Eval("Materialname")%>'></asp:Label>
</ItemTemplate>
<FooterStyle Wrap="False"></FooterStyle>
</asp:TemplateColumn>
<asp:TemplateColumn>
<HeaderStyle Wrap="False" HorizontalAlign="Center" Width="200px"></HeaderStyle>
<ItemStyle Wrap="False" HorizontalAlign="Center"></ItemStyle>
<HeaderTemplate>数量</HeaderTemplate>
<ItemTemplate>
<asp:Label ID="lblQty" runat="server" Text='<%# Eval("Qty")%>'></asp:Label>
</ItemTemplate>
<FooterStyle Wrap="False"></FooterStyle>
</asp:TemplateColumn>
<asp:TemplateColumn>
<HeaderStyle Wrap="False" HorizontalAlign="Center" Width="150px"></HeaderStyle>
<ItemStyle Wrap="False" HorizontalAlign="Center"></ItemStyle>
<HeaderTemplate>价格</HeaderTemplate>
<ItemTemplate>
<asp:Label ID="lblPrice" runat="server" Text='<%# Eval("Price")%>'></asp:Label>
</ItemTemplate>
<FooterStyle Wrap="False"></FooterStyle>
</asp:TemplateColumn>
<asp:TemplateColumn>
<HeaderStyle CssClass="hidden"></HeaderStyle>
<ItemStyle CssClass="hidden" />
<ItemTemplate>
<input type="text" id="reSysID" runat="server" value='<%# Eval("PartID")%>' /></ItemTemplate>
<FooterStyle CssClass="hidden"></FooterStyle>
</asp:TemplateColumn>
</Columns>
</tittle:CustomDataGrid>

主要JS:

//数据保存
function savePageValue() {
   var val = "";
   var newcount = 0;
   var tr = document.getElementById("grdResult").getElementsByTagName("tr");
   //备注长度check
   var remark = document.getElementById("txtRemark").value;
   if (remark.length > 2000) {
     alert("备注长度不能超过2000!");
     return false;
}
//默认有条表头数据
if (tr.length < 2) {
alert(“必须添加一条明细”);
return false;
}
for (i = 1; i < tr.length; i++) {
var td = tr[i].getElementsByTagName("td");
var par = /^[0-9]*[1-9][0-9]*$/;
if (td[1].children[0].value == ""
|| td[2].children[0].value == "") {
alert("第" + i + "行")+ "的部品编码不能为空!");
return false;
}
if (!par.test(td[3].children[0].value)) {
alert("第" + i + "行" + "输入的数量不正确");
td[3].children[0].focus();
td[3].children[0].value = "";
return false;
}
if (td[1].children[0].defaultValue != ""|| td[2].children[0].defaultValue != ""|| td[3].children[0].defaultValue != "")
val = td[1].children[0].value + "$"+ td[2].children[0].value + "$"+ td[3].children[0].value + "#" + val;
else {
newcount++;
document.forms[0].hd_newCount.value = newcount;
}
}
return true;
}

2.后台代码:

//新增
public List<PartsFactory> addList = new List<PartsFactory>();//需要引入:using System.Collections.Generic;

//取得数据
private void getProcessData()
{
int i = 0;
PartsFactory parts = new PartsFactory();//实例化struct(结构)

#region 新增数据
int newRowCount = 0;
if (this.hd_newCount.Value != "")
newRowCount = int.Parse(this.hd_newCount.Value);
if (newRowCount > 0)
{
//qty
string[] qty = Request.Form["txtQty"].ToString().Split(',');
string[] MaterialID = Request.Form["MaterialID"].ToString().Split(',');
string[] Materialcode = Request.Form["Materialcode"].ToString().Split(',');
string[] Materialname = Request.Form["Materialname"].ToString().Split(',');
string[] price = Request.Form["txtPriceText"].ToString().Split(',');
for (i = 0; i < MaterialID.Length; i++)
{
parts = new PartsFactory();//实例化结构(struct)
parts.qty = qty[i];
parts.materialcode = Materialcode[i];
parts.materialname = Materialname[i];
parts.materialCodeID = MaterialID[i];
parts.price = string.IsNullOrEmpty(price[i]) ? "0" : price[i];
addList.Add(parts);
}
}
#endregion

//提交按钮
protected void btnSubmit_Click(object sender, EventArgs e)
{
try
{
getProcessData();//获取数据

//数据操作
dto.SysID = logic.Submit(dto);

}
catch (Exception ex)
{
throw new Exception(ex.Message.ToString());
}

}

三、 BusinessRules下的Logic:

public class test
{

//X单明细
private List<PartsFactory> _lstParts;

public List<PartsFactory> LstParts
{
get { return _lstParts; }
set { _lstParts = value; }
}

}

public struct PartsFactory
{
  public string detailID;//明细ID
 public string materialCodeID;//部品ID
 public string qty;//数量
 public string recepitQty;//接受数量
 public string materialname;//部品名称
 public string materialcode;//部品代码
 public string price;//价格
}

二、 BusinessRules下的DTO:

for (int i = 0; i < dto.LstParts.Count; i++)
{
string guid2 = Guid.NewGuid().ToString();
if (String.IsNullOrEmpty(guid2))
{
throw new Exception("取得GUID错误");
}

PartsFactory partsList = dto.LstParts[i];
string[] parametersDetailExtension = new string[6];
parametersDetailExtension[0] = guid2;
parametersDetailExtension[1] = partsList.price;//单价
parametersDetailExtension[2] = partsList.qty;//数量
parametersDetailExtension[3] = partsList.materialname;//物流名称
parametersDetailExtension[4] = partsList.materialCodeID;//物流ID
parametersDetailExtension[5] = dto.SysID;//关联主单据

//然后传到DBService进行处理
}

public class States_Command
{
//传入结构对象
public void SetState(Display displayArgs)
{
Entity entity_all = new Entity(displayArgs.EntityName);
entity_all[displayArgs.EntityName + "id"] = displayArgs.EntityId;
entity_all[displayArgs.ParamName] = new OptionSetValue(displayArgs.ParamValue);
entity_all[displayArgs.ParamDataName] = DateTime.UtcNow;
_service.Update(entity_all);
} } //结构
struct Display {
public string EntityName;
public string ParamName;
public int ParamValue;
public string ParamDataName;
public Guid EntityId;
}

不足的地方还请大家多多指教,提出来,大家一起学习。

编程写一个方法时,注意方法中传参数的数量最好不要超过5个,超过5个怎么办?可以用struct或class,或一个字典类的更多相关文章

  1. vlc 详细使用方法:libvlc_media_add_option 函数中的参数设置

    vlc 详细使用方法:libvlc_media_add_option 函数中的参数设置 [转载自]tinyle的专栏 [原文链接地址]http://blog.csdn.net/myaccella/ar ...

  2. 用肘方法确定 kmeans 聚类中簇的最佳数量

    说明: KMeans 聚类中的超参数是 K,需要我们指定.K 值一方面可以结合具体业务来确定,另一方面可以通过肘方法来估计.K 参数的最优解是以成本函数最小化为目标,成本函数为各个类畸变程度之和,每个 ...

  3. CSS样式表、JS脚本加载顺序与SpringMVC在URL路径中传参数与SpringMVC 拦截器

    CSS样式表和JS脚本加载顺序 Css样式表文件要在<head>中先加载,这样网页显示时可以第一次就渲染出正确的布局和样式,网页就不会闪烁,或跳变 JS脚本尽可能放在<body> ...

  4. Java继承,重写方法时改变方法的访问权限

    java中的方法天生具有继承多态特性,这点与C++有很大不同(需要在父类方发上加virtual关键字),但用起来确实方便了许多. 最简单的继承多态 声明一个接口BaseIF,只包含一个方法声明 pub ...

  5. [线程]Thead 中传参数RuntimeError: thread.__init__() not called

    在写一个多线程类的时候调用报错 RuntimeError: thread.__init__() not called class NotifyTread(threading.Thread): def ...

  6. 在chrome中的source找不到自己写的js时处理方法

    今天准备调试下js,突然发现在谷歌的中source中找不到我要调试的js,后来查资料和听同事说谷歌会把js压缩,于是找到以下方法来调试js 1. debugger神器 横扫各个浏览器.脚本运行到deb ...

  7. .net中以传引用的方式 向方法中传参数

    CLR(CommonLanguageRuntime)公共语言运行时,允许以传引用而非传值的方式传递参数.在C#中,这是用关键字 out 和ref来做到的. 从CLR角度来看,这两个关键字没什么区别,生 ...

  8. idea设置调用方法时提示方法注释

    如图所示:打开file-->setting-->Editor-->General,搜索show,然后勾选上Show quick documentation on mouse move ...

  9. IDEA设置调用方法时提示方法上的注释

    IDEA设置代码注释提示,代码提示,鼠标放上面提示方法的注解信息 打开file-->setting-->Editor-->General,将Show quick documentat ...

随机推荐

  1. 在Ubuntu系统下设置永久性Swap交换空间(转帖)

    http://blog.sina.com.cn/s/blog_6e4388910100tsk7.html swap 一般都在一个专有的swap区里,这可能是因为在安装的时候系统会提示你创建一个swap ...

  2. bootstrap的学习总结

    1.bootstrap是一个css框架,它提供了很多类,这些类中实现了内外边距,颜色,大小等样式的封装,它还提供了很多常用插件可以直接使用 2.12栅格本质上是将标签的外边距和内边距通过“格子”的思想 ...

  3. 系统session超时时间的设置

    一个网站系统:当你停止活动一段时间后,系统自动退出 三种方式设置: 1. 在server.xml中定义context时采用如下定义: <Context path="/livsorder ...

  4. 使用array_merge重新排列数组下标

    array_merge() 函数把两个或多个数组合并为一个数组. 如果键名有重复,该键的键值为最后一个键名对应的值(后面的覆盖前面的).如果数组是数字索引的,则键名会以连续方式重新索引. 注释:如果仅 ...

  5. 最小生成树之克鲁斯卡尔(Kruskal)算法

    学习最小生成树算法之前我们先来了解下 下面这些概念: 树(Tree):如果一个无向连通图中不存在回路,则这种图称为树. 生成树 (Spanning Tree):无向连通图G的一个子图如果是一颗包含G的 ...

  6. nested exception is java.sql.SQLException: Incorrect string value: '\xE7\x99\xBB\xE9\x99\x86...' for column 'image' at row 1

    HTTP Status 500 - Hibernate operation: could not insert: [cn.itcast.shop.product.vo.Product]; uncate ...

  7. iOS开发UI之Quartz2D使用(绘制基本图形)

    iOS开发UI篇—Quartz2D使用(绘制基本图形) 一.简单说明 图形上下文(Graphics Context):是一个CGContextRef类型的数据 图形上下文的作用:保存绘图信息.绘图状态 ...

  8. pseudo tty破除无法自动输入密码的限制

    没有root权限,没有ssh密钥对,又想自动输入密码咋办? #!/usr/bin/python # simplest builtin python pseudo-tty for ssh passwor ...

  9. leetcode-1-TwoNums

    flag -everyday do leetcode problems at least one and at most three. problem here 需要学习的是c++的map类型,之前竟 ...

  10. 一步步入门log4cpp

    前言 项目实现过程中,需要检查.查找或者调试程序bug等,此时程序日志则较为清晰地展现代码的运行过程.目前接触到的方法有打印消息到控制台,将重要信息输出到某个文件比如txt文件,或者直接使用日志库. ...