2012-09-10 38 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"); 
相關問題