2012-09-10 37 views
0

目前我有几种方法接受GridView对象作为参数,并且正在访问GridView对象内的值以执行计算。C# - 传递GridView对象作为参数是一种好的做法吗?

我的问题是这是否是一种好的做法?我注意到,当我需要更改结果显示(即GridView最初将有9个单元格而不是10个单元格的结果)时,我需要更改所有使用它的方法或冒险得到一个ArrayIndexOutOfBound错误。

public static string checkCount(GridView gr) 
{ 
    //need to change the cell index if the sql to get the gridview is changed 
    string name = gr.Rows[b].Cells[9].Text.ToUpper(); 
} 

对这个有什么想法?

感谢

编辑
是更好地有把SQL结果映射到对象的列表,该对象本身是数据行的表示方法。这种方式即使我删除了一列,我只需要处理映射方法本身,其他人应该按照标准运行。

实施例:

public class Profile{ 
    string name {get;set;} 
    string icNo {get;set;} 
} 

public list getProfileList(){ 
    //run some query here and loop the result 
    //while looping 
    profile = new Profile(name=/*the name result*/, icNo=/*icNo from result*/); 
    //return the list 
} 

网页加载

List profiles = getProfileList(); 
gv.DataSource = profiles; 
gv.DataBind(); 


public string calculationMethod(List profiles){ 
    //when in need of the result, just get the object from profiles and process 
} 
+0

如果它可以让你避免重复代码,它是** **一个很好的做法。面临的挑战是建立合适的方法,在良好的层(留在UI层),避免使用frankenstein方法的复杂度较低。 –

+0

重复的意义在于,无论何时我需要从gridview中获取数值名称,我必须使用涉及索引号的Text方法,并且当我更改sql时,我需要更改所有这些(想象把这条线分散在几个班上)。我认为这可能会导致维护问题,因此征求意见。 – ipohfly

回答

1

对象作为参数和GridView的对象内的值被访问以执行计算

从哪里价值来了?我认为更好的做法是直接对您的数据/业务对象或仅负责此特定计算的帮助对象执行计算。然后你可以有另一个函数动态地从这个帮助对象而不是你的BO或其他任何东西中创建结果视图。

将有9个细胞,而不是10个细胞的结果原本

这就是为什么你不应该直接与细胞的计算工作。如果你真的需要这样做,那么你应该寻找另一种方法来找到计算指标。他们可以依赖于实际的结果对象。 (其中您的值也可以在特定的数据类型中存在;仅用于可视化和用户输入应该转换为字符串或某种类型)

在generell解决此问题,您应该清楚分析您的需求。保留一些事情,如:

也可能想到用N层模型为您的应用程序的

+0

对于你的答案的大部分。这不是一个n层问题,这是一个典型的“帮助方法”问题 - 帮助方法太过有用。 – slugster

0

转换<asp:BoundField>到:<asp:TemplateField>

<asp:TemplateField HeaderText="name" SortExpression="DateCreated"> 
     <ItemTemplate> 
      <asp:label id="LbMyName" text="" runat="server"> 
     </ItemTemplate> 
</asp:TemplateField> 

现在你可以从后面的代码调用:

Label lb = GridView1.Rows[i].FindControl("LbMyName"); 
相关问题